題目:輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。例如輸入「It's a good day.」,則輸出「day. good a It's」數組
思路1:先翻轉整個字符串,而後從首字母開始,每掃描一個單詞(遇到空格),翻轉一個單詞spa
/** * 字符串翻轉 * 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。例如輸入「It's a good day.」,則輸出「day. good a It's」 * 思路:先翻轉整個字符串,而後從首字母開始,每掃描一個單詞(遇到空格),翻轉一個單詞 * * @param input * @return */ public String reverse(String input) { char[] output = input.toCharArray(); reverse(output, 0, output.length); int i = 0; for (int j = 0; j < output.length; j++) { if (output[j] == ' ') { reverse(output, i, j); i = j + 1; } } reverse(output, i, output.length); //reverse(output, , output.length); return String.valueOf(output); } /** * 翻轉整個字符數組 * * @param input * @param begin * @param end */ private void reverse(char[] input, int begin, int end) { if (begin == end) return; while (begin < --end) { char c = input[begin]; input[begin] = input[end]; input[end] = c; begin++; } }
思路2:建立一個字符數組,逆序遍歷整個字符串,依次將掃描到的單詞(遇到空格)存放到字符數組中code
/** * 字符串翻轉 * 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字符的順序不變。句子中單詞以空格符隔開。爲簡單起見,標點符號和普通字母同樣處理。例如輸入「It's a good day.」,則輸出「day. good a It's」 * 思路:建立一個字符數組,逆序遍歷整個字符串,依次存將掃描到的單詞(遇到空格)存放到字符數組中 * @param input * @return */ public String Reverse(String input) { int current = 0; char[] output = new char[input.length()]; char[] chars = input.toCharArray(); int begin; int end = chars.length; for (int i = chars.length - 1; i >= 0; i--) { if (chars[i] == ' ') { begin = i + 1; while (begin < end) { output[current++] = chars[begin++]; } output[current++] = ' '; end = i; } } begin = 0; while (begin < end) { output[current++] = chars[begin++]; } return String.valueOf(output); }