美文网首页
反转字符串里的单词

反转字符串里的单词

作者: 环宇飞杨 | 来源:发表于2020-04-11 09:35 被阅读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);
            }
    }
    

    相关文章

      网友评论

          本文标题:反转字符串里的单词

          本文链接:https://www.haomeiwen.com/subject/oqmemhtx.html