面試編試題集錦
阿新 • • 發佈:2020-08-04
public class Leetcode151 { public static 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[i]是空格字元 並且上一個chars[i-1]是非空格字元 chars[cur++] = ' '; space = true; } } len = space ? (cur-1) : cur; if(len <= 0 ) return ""; //翻轉 //先逆序 然後再對每一個單詞逆序 reverse(chars, 0, len); //對前一個單詞進行逆序(哨兵) int preSpaceIdx = -1 ; for(int i = 0 ; i < len; i++) { if(chars[i] != ' ') continue; //i 是空格的位置 reverse(chars, preSpaceIdx+1, i); preSpaceIdx = i; } reverse(chars, preSpaceIdx+1, len); return new String(chars,0,len); } //逆序 [L,r) 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--; } } public static void main(String[] args) { System.out.println(reverseWords(" are you ok ")); System.out.println(reverseWords(" hello world! ")); System.out.println(reverseWords("a good example")); } }