182、反轉字符串中的單詞III

題目描述:
給定一個字符串,你需要反轉字符串中每個單詞的字符順序,同時仍保留空格和單詞的初始順序。

示例 1:

輸入: “Let’s take LeetCode contest”
輸出: “s’teL ekat edoCteeL tsetnoc”
注意:在字符串中,每個單詞由單個空格分隔,並且字符串中不會有任何額外的空格。

目標:反轉的是以單詞爲基準的
注意的是最後一個end如果是以空格結尾那麼沒有問題,如果是以單詞結尾就要注意一下,我天我又寫了好長時間,而且效率不是很高

class Solution {
    public String reverseWords(String s) {
       int start = 0;
		int end = 0;
		char [] t = s.toCharArray();
		StringBuilder sBuilder = new StringBuilder();
		while (end < t.length) {
        	
			if(t[end] == ' '){
				sBuilder.append(new String(rever(start, end, t)).subSequence(start, end + 1));
        //        System.out.println(sBuilder);
				start = end + 1;
				end ++;
			}else {
				end ++;
			}
            if(end == t.length - 1 && t[end] != ' '){
				sBuilder.append(new String(rever(start, end, t)).subSequence(start, end + 1));
				end ++;
			}
		}

     return new String(sBuilder);   
    }
	
	public static char[] rever(int start ,int end,char [] tem){
		//反轉從下標爲start到end的字符(不包括end)
		if(tem [end] == ' '){
            end = end -1;
        }
		while (start < end) {
			char tem1 = tem[start];
			tem[start] = tem[end];
			tem[end] = tem1;
			start ++;
			end --;
		}
		return tem;
	}
	
}

如果使用split呢??
效率提高了
代碼:

class Solution {
    public String reverseWords(String s) {
      	String [] temStrings = s.split(" ");
		StringBuilder sBuilder = new StringBuilder();
		
		for (int i = 0; i < temStrings.length; i++) {
			String string = temStrings[i];
			if(i == temStrings.length - 1){
				sBuilder.append(rever(0, string.length(), string.toCharArray()));
			}else {
				sBuilder.append(rever(0, string.length(), string.toCharArray())).append(" ");
			}
		}
		
		return new String(sBuilder);
		
		   
    }
	
	public static char[] rever(int start ,int end,char [] tem){
		//反轉從下標爲start到end的字符(不包括end)
        end = end - 1;
		while (start < end) {
			char tem1 = tem[start];
			tem[start] = tem[end];
			tem[end] = tem1;
			start ++;
			end --;
		}
		return tem;
	}
	
}

排名靠前的代碼

class Solution {
    public String reverseWords(String s) {
        
        int len = s.length();
        if(len <=1) return s;
        char[] arr = s.toCharArray();
        int start = 0;
        while(start < len){
            int end = s.indexOf(' ', start);
            if(end == -1){
                reverse(arr, start, len -1);
                break;
            }
            else{
                reverse(arr, start, end - 1);
                start = end + 1;
            }
            
        }
        // return arr.toString();
        return String.valueOf(arr);
    }
    public void reverse(char[] arr, int a , int b){
        while(a < b){
            char tmp = arr[a];
            arr[a] = arr[b];
            arr[b] = tmp;
            a ++;
            b--;
        }
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章