leetcode (Reverse Words in a String III)
阿新 • • 發佈:2018-12-23
Title:Reverse Words in a String III 557
Difficulty:Easy
原題leetcode地址:https://leetcode.com/problems/reverse-words-in-a-string-iii/
1. 註解見程式碼註釋
時間複雜度:O(n^2),巢狀迴圈。
空間複雜度:O(n),申請額外空間List。
/** * 不能使用split()方法,將每個單詞的起始位置分別存入List中,然後對每個單詞進行Reverse * @param s * @return */ public static String reverseWords(String s) { if (s.length() <= 0) { return s; } List<Integer> startList = new ArrayList<>(); List<Integer> endList = new ArrayList<>(); for (int i = 0; i < s.length() - 1; i++) { if (i == 0 && s.charAt(i) != ' ') { startList.add(i); } if (s.charAt(i) == ' ' && s.charAt(i + 1) != ' ') { startList.add(i + 1); } } for (int i = 1; i < s.length(); i++) { if (i == s.length() - 1 && s.charAt(i) != ' ') { endList.add(i); } if (s.charAt(i) == ' ' && s.charAt(i - 1) != ' ') { endList.add(i - 1); } } char cS[] = s.toCharArray(); for (int i = 0; i < startList.size(); i++) { int n = startList.get(i); int m = endList.get(i); while (n < m) { char tmp = cS[n]; cS[n] = cS[m]; cS[m] = tmp; n++; m--; } } return new String(cS); }