快轉到主要內容
leetcode 344 - Rrevese String

leetcode 344 - Rrevese String

·
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
Eason Chiu
作者
Eason Chiu
一個不做筆記就容易忘記的工程師
目錄

題目
#

leetcode 344 - Reverse String(題目說明請點連結)

題目簡述
#

反轉一個字串陣列。

Example 1:

Input: s = ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]
Explanation: 反轉字串陣列,將 "hello" 變成 "olleh"。

Example 2:

Input: s = ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]
Explanation: 反轉字串陣列,將 "Hannah" 變成 "hannaH"。

解題思路
#

輸入為一個陣列,輸入為一個反方向陣列的內容,過程中不能建立額外的空間。
給定index i為0、j陣列長度-1。
隨著迴圈次數,i逐漸遞增,j逐漸遞減,中止條件當i>j,也就是到中間時交換完畢。

例子說明
#

s = ["h","e","l","l","o"]

  • 初始情況:i = 0j = 4s = ["h","e","l","l","o"]
  1. 第一次迭代:

    • 交換 s[0]s[4]
    • s = ["o","e","l","l","h"]
    • i++j--i = 1j = 3
  2. 第二次迭代:

    • 交換 s[1]s[3]
    • s = ["o","l","l","e","h"]
    • i++j--i = 2j = 2
  3. 第三次迭代:

    • i = 2j = 2i == j,停止迭代
    • 最終結果:s = ["o","l","l","e","h"]

完整程式碼
#

java
class Solution {
    public char[] reverseString(char[] s) {
        // 初始化兩個指針,i從開頭開始,j從結尾開始
        int i = 0;
        int j = s.length - 1;

        while(i < j) { // 當i小於j時繼續交換
            char tmp = s[i]; // 暫存i位置的字符
            s[i] = s[j]; // 將j位置的字符放到i位置
            s[j] = tmp; // 將暫存的字符放到j位置
            i++; // i指針向右移動
            j--; // j指針向左移動
        }

        return s; // 返回反轉後的字符數組
    }
}

時間複雜度
#

  • 時間複雜度:O(n),其中 n 是字符數組的長度
  • 空間複雜度:O(1),只使用了常數額外空間

相關文章

leetcode 1047 - Remove All Adjacent Duplicates In String
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
leetcode 26 - Remove Duplicates from Sorted Array
類別 
Leetcode
標籤 
Java Leetcode Easy Two Pointers Problem
leetcode 15 - 3Sum
類別 
Leetcode
標籤 
Java Leetcode Medium Two Pointers Problem Blind75