1. 程式人生 > >557.反轉字串中的單詞 III

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 --;
        }
    }
}