LeetCode:344-反轉字符串

344. 反轉字符串

編寫一個函數,其作用是將輸入的字符串反轉過來。輸入字符串以字符數組 char[] 的形式給出。

不要給另外的數組分配額外的空間,你必須原地修改輸入數組、使用 O(1) 的額外空間解決這一問題。

你可以假設數組中的所有字符都是 ASCII 碼錶中的可打印字符。

示例 1:

輸入:[“h”,“e”,“l”,“l”,“o”]
輸出:[“o”,“l”,“l”,“e”,“h”]
示例 2:

輸入:[“H”,“a”,“n”,“n”,“a”,“h”]
輸出:[“h”,“a”,“n”,“n”,“a”,“H”]

解法1:直接遍歷法

class Solution {
    public void reverseString(char[] s) {
        int j = s.length -1;
        for (int i = 0; i < s.length; i++) {
            if( i <= j && s[i] != s[j]){
                char temp = s[i];
                s[i] = s[j];
                s[j] = temp;
            }
            if( i> j){
                break;
            }
            j = j - 1;
        }
        for (int i = 0; i < s.length; i++) {
            System.out.println(s[i]);
        }
    }
}

執行結果:
在這裏插入圖片描述
小結
把自己繞進去,眼花繚亂,錯誤把j = j - 1;寫成j = j - i;還好把自己又繞出來。

解法2:利用棧

class Solution {
    public void reverseString(char[] s) {
            Stack<Character> stack = new Stack();
            for( int i= 0; i<s.length; i++){
                stack.push(s[i]);
            }
            for(int j = 0; j<s.length && stack.size() > 0;j++){
                s[j] = stack.pop();
            }
    }
}

結果:
在這裏插入圖片描述
小結
棧是最適合解決這類的問題,利用先進後出的思想。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章