力扣557. 反转字符串中的单词 III

给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。

输入:“Let’s take LeetCode contest”
输出:“s’teL ekat edoCteeL tsetnoc”

本题乍一看可以原地交换,但是用java语言提交,字符串不可变,因此只能依次遍历,使用指针,以空格为界翻转单个字符串并添加至StringBuffer,需要注意的是最后一个单词,以contest为例,start依然指向了c,而i已经出界,以i-1为末尾依然没有问题,但是不可以再添加空格,因此多了一重判断。

 public String reverseWords(String s) {
        StringBuffer ret = new StringBuffer();
       int len=s.length();
       int i=0;
       while(i<len){
           int start=i;
           while(i<len&&s.charAt(i)!=' '){
               i++;
           }
           for (int j = i-1; j>=start ; j--) {
                   ret.append(s.charAt(j));
               }
           if(i<len&&s.charAt(i)==' '){              
                   ret.append(' ');                   
           }
           i++;
       }
       return ret.toString();
    }

你可能感兴趣的:(算法,leetcode,算法,职场和发展)