美文网首页
151. 翻转字符串里的单词

151. 翻转字符串里的单词

作者: crazyfox | 来源:发表于2021-09-29 15:52 被阅读0次

    151. 翻转字符串里的单词

    难度中等376 收藏 分享 切换为英文 接收动态 反馈

    给你一个字符串 s ,逐个翻转字符串中的所有 单词

    单词 是由非空格字符组成的字符串。s 中使用至少一个空格将字符串中的 单词 分隔开。

    请你返回一个翻转 s 中单词顺序并用单个空格相连的字符串。

    说明:

    • 输入字符串 s 可以在前面、后面或者单词间包含多余的空格。
    • 翻转后单词间应当仅用一个空格分隔。
    • 翻转后的字符串中不应包含额外的空格。

    示例 1:
    输入:s = "the sky is blue"
    输出:"blue is sky the"
    </pre>

    示例 2:
    输入:s = " hello world "
    输出:"world hello"
    解释:输入字符串可以在前面或者后面包含多余的空格,但是翻转后的字符不能包括。
    </pre>

    思路:
    先遍历一遍,去除字符串中的多余空格得s
    然后写一个函数,可以翻转[m,n]中的字符
    翻转整个字符串s
    遍历s,遇到空格,翻转单词

    代码:

    class Solution {
        
    
        public String reverseWords(String s){
            if(s==null)return null;
            char[] chars = s.toCharArray();
            int len = 0;
            int cur = 0;
            boolean space = true;
            for(int i=0;i<chars.length;i++){
                if(chars[i] != ' '){
                    chars[cur++]=chars[i];
                    space = false;
                }else if(space==false){
                    chars[cur++]=' ';
                    space=true;
                }
            }
            len = space?(cur-1):cur;
            reverse(chars,0,len);
            int prevSpaceIdx=0;
            for(int i = 0;i<len;i++){
                if(chars[i]==' '){
                    reverse(chars,prevSpaceIdx,i);
                    prevSpaceIdx=i+1;
                }
            }
            reverse(chars,li,len);
            return new String(chars,0,len);
        }
    
        private static void reverse(char[] chars,int l,int r){
            r--;
            while(l<r){
                char tmp = chars[l];
                chars[l]=chars[r];
               chars[r]=tmp; 
               l++;
               r--;
            }
        }
    }
    

    相关文章

      网友评论

          本文标题:151. 翻转字符串里的单词

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