LeetCode刷題EASY篇如何快速反轉一個字串
阿新 • • 發佈:2018-12-18
題目
Write a function that takes a string as input and returns the string reversed.
Example 1:
Input: "hello" Output: "olleh"
Example 2:
Input: "A man, a plan, a canal: Panama" Output: "amanaP :lanac a ,nalp a ,nam A"
我的嘗試
上一篇文章中,反轉一個整數,我的思路其實是用來解決字串比較合適,因為不涉及負號和0等問題。用空間換時間,我的成功程式碼如下:
class Solution { public String reverseString(String string) { char[] chars = string.toCharArray(); char[] charRes = new char[chars.length]; for (int i = chars.length - 1; i >= 0; i--) { charRes[chars.length - i - 1] = chars[i]; } return String.valueOf(charRes); } }
優化方法
leetcode此題沒有給出答案,不過看到一個夥伴的js程式碼,突然發現除了上面的空間換時間方法外,另外的一個方法:
倒序輸出其實就是兩個元素交換,指定兩個指標,一個從頭i,一個從尾j,當i<j時,利用一個char空間儲存臨時元素,進行交換。然後移動指標即可,空間複雜度比我原來的演算法低,而且時間複雜度也是O(n)。我很快就寫出來java版本。
演算法的三個武器:
- 兩個指標,同時遍歷,移動處理問題
- 對於連續的問題,利用滑動視窗,計算當前視窗的值,然後進行增加或者刪除
- 空間換時間解決問題,比如我的演算法
class Solution { public String reverseString(String string) { char[] chars = string.toCharArray(); int i = 0, j = chars.length - 1; char temp; while (i < j) { temp = chars[i]; chars[i] = chars[j]; chars[j] = temp; i++; j--; } return String.valueOf(chars); } }