随笔-翻转字符串里的单词

版权声明:中华人民共和国持有版权 https://blog.csdn.net/Fly_Fly_Zhang/article/details/85262543

题目:

给定一个字符串,逐个翻转字符串中的每个单词。

示例:

输入: “the sky is blue”,
输出: “blue is sky the”.
说明:

无空格字符构成一个单词。
输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。
如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

思路:先用String的库函数,trim 将字符串头部和尾部的空格去除。采用双指针,j走到下一个空格的地方 将i - j-1进行反转。如果两个单词之间有多个空格时,i++;j++ 直到i和j都不为空,重复操作; 当跳出循环后,做最后一个单词的反转。

public class Solution {
    public char[]  reverse(char[] ch,int start,int end){
        while(start<end){
            char ch1=ch[start];
            ch[start]=ch[end];
            ch[end]=ch1;
            start++;
            end--;
        }
        return ch;
    }
    public String reverseWords(String s) {
        if(s==null){
            return s;
        }
        s=s.trim();
        if(s==""){
            return s;
        }
        char [] ch=s.toCharArray();
        ch=reverse(ch,0,ch.length-1); //全部反转
        int i=0;
        int j=0;
        StringBuffer sb=new StringBuffer();
        while(j<ch.length){
            if(ch[j]!=' '){
                j++;
            }else{
                if(ch[i]!=' '){
                    sb.append(reverse(ch,i,j-1),i,j+1-i); 
                    i=j+1;
                    j++;
                }else{
                    i++;
                    j++;
                }
            }
        }
        sb.append(reverse(ch,i,j-1),i,j-i);
         return sb.toString();
    }
}

猜你喜欢

转载自blog.csdn.net/Fly_Fly_Zhang/article/details/85262543