【算法 day08】LeetCode 151.翻转字符串里的单词 |卡码网:55.右旋转字符串

发布于:2025-06-23 ⋅ 阅读:(20) ⋅ 点赞:(0)

 151.翻转字符串里的单词

题目链接 | 文档讲解 |视频讲解 : 链接

 1.思路:
  • 1.去除字符串头尾的空格 ,使用库函数 trim()

  • 2.对字符串进行分割,使用库函数split()

  • 3.创建StringBuilder sb,遍历集合,中间是空格不处理,非空格sb拼接单词后,添加空格,最后一次遍历不需要添加空格

  • 4.返回字符串

 2.代码:
 public static String reverseWords(String s) {
        //去除字符串开头和结尾的空格
        String s2 = s.trim();
        //进行字符串分割
        String[] s1 = s2.split(" ");
        StringBuilder sb= new StringBuilder();
        for (int i = s1.length - 1; i >= 0; i--) {
           //中间是空格的不做处理
           if(s1[i].equals("")){
               continue;
           }
           //非空格元素追加
            sb.append(s1[i]);
            //中间单词之间需要空格,最后一个元素后面不需要加空格,只有
            if (i != 0) {
                sb.append(" ");
            }
        }
        return  sb.toString();
    }

还有一种老师的思路还没有缕清楚,周末补充~~

卡码网:55.右旋转字符串

题目链接 | 文档讲解 |视频讲解:链接

 1.思路:
  • 1.先将整个字符串反转

  •  2.反转前k个字符 

  • 3.反转k后面的字符串

 2.代码:
 public static String rightReverseWords(String s,int k) {
        char[] charArray = s.toCharArray();
        //1反转整个字符串 双指针
        reverse(charArray,0,s.length()-1);
        //2.反转前半段
        reverse(charArray,0,k-1);
        //3.反转后半段
        reverse(charArray,k,s.length()-1);
        return new String(charArray);
    }
    public static void reverse(char [] a,int left,int right){
        while (left<right){
            char temp=a[left];
            a[left]=a[right];
            a[right]=temp;
            left++;
            right--;
        }
    }
 1.思路:
  • 使用现有的方法,字符串中substring方法,区间范围是左闭右开

 2.代码:
    public static String rightReverseWords2(String s,int k) {
        //subString 左闭右开
        String start = s.substring(s.length() -k, s.length() );
        System.out.println(start);
        String end = s.substring(0,s.length() -k );
        System.out.println(end);
        return  start+end;
    }

  kmp算法相关题目还没有看,后续补充~~


网站公告

今日签到

点亮在社区的每一天
去签到