該題Reverse String要將輸入字串進行反轉,如下所示,範例1的字串內容為hello,反轉之後的結果為olleh,範例2Hannah,反轉後為hannaH,此題有許多寫法,而利用two pointers的解法可以得到很好的效能。

Example 1:

Input: ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Example 2:

Input: ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]

作法解析:宣告兩個索引指標,一個指到頭,一個指到尾,將兩個指標指到的元素進行交換,並將兩個指標索引值向彼此移動一格。

程式碼:

class Solution {
public:
    void reverseString(vector<char>& s) {
        int i = 0, j = s.size() - 1, tmp;
        
        while (i < j)
        {
            tmp = s[i];
            s[i++] = s[j];
            s[j--] = tmp;
        }       
    }
};

1.指到頭的指標(i = 0),指到尾的指標(j = s.size() - 1)

2.如果指到頭的指標比尾的指標小,代表尚有元素未進行交換(while (i < j))。

3.while迴圈內實現將兩指標位置之值進行交換,並且兩個指標向彼此移動一格。

arrow
arrow

    水面上的小草 發表在 痞客邦 留言(0) 人氣()