557.反转字符串中的单词 III

557.反转字符串中的单词 III

题目描述

博主的思路:

将字符串转化为字符数组后,当遇到空格后就添加到 rst 上
这里要注意index和 ch数组(长的为字符串s+1)的意义

class Solution {
    public String reverseWords(String s) {
        String rst = "";
       
        int index = 0;
        
        char[] ch = new char[s.length()+1];
        ch = s.toCharArray();
        for(int i=0;i<ch.length;i++){
            
            if(ch[i]!=' ' && i!=ch.length-1){
                
                index++;
            }else{
                System.out.println("i="+i);
                if(i!=ch.length){
                    for(int j=i-1;j>=i-index;j--){
                    
                    rst = rst + (ch[j]+"");
                    }
                    rst += " ";
                    index = 0;
                }else{
                    System.out.println("sdfsdf");
                    for(int j=i-1;j>=i-index;j--){
                        rst = rst + (ch[j]+"");
                    }
                }
            }
        }
        
        return rst;
    }
}

但是运行结果却不理想,超时了。
然后我看了下第一名的代码,才3s
优点在于 调用的reserve方法直接传了3个参数进去,提高效率
还有start,nextSpace来进行定位,少了很多数组的操作

class Solution {
    public String reverseWords(String s) {
    	char[] cl = s.toCharArray();
        int start = 0;
        int nextSpace = s.indexOf(' ',start);
        while(nextSpace != -1) {
            reverse(cl,start,nextSpace - 1);
            start = nextSpace + 1;
            nextSpace = s.indexOf(' ',start);
        }
        reverse(cl,start,cl.length - 1);
        return new String(cl);
    }
    
    public void reverse(char[] cl,int start,int end){
        while(start < end){
            char temp = cl[start];
            cl[start] = cl[end];
            cl[end] = temp;
            start ++;
            end --;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/qq_43298314/article/details/84729903