151. 翻转字符串里的单词

翻转字符串里的单词

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

示例:

输入: "the sky is blue",
输出: "blue is sky the".

说明:

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

思路+代码+注释:

public static String reverseWords(String s) {
        /*

        思路:先对字符串进行反转并且将前后空格去掉,遍历反转后的字符串,遇到空格就跳过,遇到字符如果该字符是第一个或者该字符前有空格,那么就说明是一个单词的开始,从
        该字符开始往后遍历,只要是字符就添加到word中,直到遇到空格为止,将word反转,在word后加一个空格添加到res中,如果是最后一个字符此时将word反转添加到res中
         */
        StringBuilder sb=new StringBuilder(s).reverse();
        String sourceStr=sb.toString().trim();
        StringBuilder res=new StringBuilder();
        StringBuilder word=new StringBuilder();
        for (int i = 0; i < sourceStr.length(); i++) {
            char c=sourceStr.charAt(i);
            if (c!=' ')
            {
                if (i==0 || sourceStr.charAt(i-1)==' ')
                {
                    word.append(c);
                    boolean flag=false;
                    for (int j = i+1; j < sourceStr.length(); j++) {
                        i++;
                        char d=sourceStr.charAt(j);
                        if (d!=' ')
                        {
                            word.append(d);
                        }else {
                            flag=true;
                            break;
                        }
                    }
                    word.reverse();
                    if (flag)
                    {
                        word.append(" ");
                    }
                    res.append(word);
                    word=new StringBuilder();
                }
            }
        }
        return res.toString();
    }

你可能感兴趣的:(LeetCode,翻转字符串里的单词)