反转字符串里的单词

2020-04-11  本文已影响0人  环宇飞杨

题目

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

示例 1:

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

示例 2:

输入: " hello world! "
输出: "world! hello"
解释: 输入字符串可以在前面或者后面包含多余的空格,但是反转后的字符不能包括。

示例 3:

输入: "a good example"
输出: "example good a"
解释: 如果两个单词间有多余的空格,将反转后单词间的空格减少到只含一个。

说明:

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

解题思路

  1. 用两个while 循环先去除掉字符串左右多余的空格。
  2. 新建开始和结束两个下标不断找出空格间的单词来。
  3. 利用双端队列储存,最后遍历倒数拼接。

代码

class Solution {
        public String reverseWords(String s) {
            int left = 0;
            int right = s.length() -1 ;
            while (left <= right && s.substring(left,left +1).equals(" ")) left ++;
            while (left <= right && s.substring(right,right +1).equals(" ")) right --;
            s = s.substring (left,right+1);
            if(s.length() <= 1) return s;
            Deque<String> stack = new LinkedList<String>();
            int startIndex = -1;
            int endIndex = -1;
            for (int i = 0; i < s.length(); i++) {
                if (endIndex >= 0) {
                    String newString = s.substring(startIndex, endIndex);
                    stack.add(newString);
                    endIndex = -1;
                    startIndex = -1;
                }
                String sub = s.substring(i,i+1);
                if (!sub.equals(" ")) {
                    if (startIndex < 0) {
                      startIndex = i;
                    }
                    if (i == s.length() - 1) {
                      String newString = s.substring(startIndex, i+1);
                      stack.add(newString);
                    }
              }else 
              {
                if (startIndex >= 0) {
                    endIndex = i;
                }
              }
            }
            String newString = new String();
            while (!stack.isEmpty()){
                String string = stack.removeLast();
                newString+=string;
                newString+=" ";
            }
            return newString.substring(0,newString.length()-1);
        }
}
上一篇下一篇

猜你喜欢

热点阅读