Leetcode 挑战 Day 09 [344. Reverse String]

344. Reverse String


今天这一题是将一个字元阵列翻转过来,题目看似很单纯,但也有一些技巧和知识在其中可以使用的!有感於题目中范例如果用程序码包起来,会导致某些单词被认为是程序用语而颜色不同不便阅读,因此在之後的题目范例会用引用的方式,希望能增加可读性。

题目


Write a function that reverses a string. The input string is given as an array of characters s.

Example 1:
Input: s = ["h","e","l","l","o"]
Output: ["o","l","l","e","h"]

Example 2:
Input: s = ["H","a","n","n","a","h"]
Output: ["h","a","n","n","a","H"]

Follow up: Do not allocate extra space for another array. You must do this by modifying the input array in-place with O(1) extra memory.

这题的意思还蛮单纯的,就是希望我们能把一个字元阵列翻转过来,并且这题是不用回传任何东西的,只要修改题目给我们的阵列内容!但是他有一个额外的条件,那就是希望我们能保持空间复杂度为O(1)。

Two pointers


以python来说,使用内建函示list.reverser()当然可以很快达到这题的要求,但这样也会失去练习的意义,仔细思考这题其实有一个蛮不错的方法,那就是我们通过双指针的方式,一个从头、一个从尾开始遍历,每次互相交换值後并向内一格,当他们碰在一起或是相邻时,我们的演算法也就结束了,此时字串已经是呈现颠倒过来的状态,原因是颠倒一个字元阵列事实上就是把第i个元素放到第list.length()-i-1的位置,而反之亦然。

而在python中,我们可以透过for回圈与[-index]来达到双指标的效果,以下为python3的程序码。

class Solution:
    def reverseString(self, s: List[str]) -> None:
        for i in range(len(s) // 2):  
            s[i] , s[-(i+1)] = s[-(i+1)], s[i]  # 不断使两变数互换,达到反转效果

上述这样将两个变数的值互换的方法,其实使用了python的内建语法,python会自动帮我们处理好,而不需要建立一个temp的变数。但在其他语言中,可能需要以手动的做法将temp变数建立起来,然後再互换,以避免忘掉其中的值。

以下是C++的程序码

class Solution {
public:
    void reverseString(vector<char>& s) {
        int i;
        int m = s.size();  //阵列长度
        char temp;
        for(i=0;i<m/2;i++){
            temp = s[i];  //暂时存放变数
            s[i] = s[m-(i+1)];
            s[m-(i+1)] = temp;
        }
    }
};

<<:  基础建设: 事件与讯息系统

>>:  Day12 - Google Kubernetes Engine 基础 - Pod 建置

企业资料通讯Week7 (1) | rdt(reliable data transfer)[上]

rdt 可靠资料传输协定 由於运输层(transport)的下面那一层~网路层(network)的传...

安装 Zorin OS 16 Core 与呒虾米

本文同步刊载於我的部落格:安装 Zorin OS 16 Core 与呒虾米 – jute 前言 Zo...

冒险村20 - Design Pattern(1) - Decorator

20 - Design Pattern(1) - Decorator Decorator patte...

Day28-机器学习(2) KNN

KNN简单说明 为一种监督学习的方法,其原理就好像物以类聚一样,相同的东西会聚在一起 我们可以设定一...

Day 13. 模板语法Template Syntax – 插值 v-once、v-html

昨天我们讲了Vue的一生,今天来说说模板语法,看看要怎麽把vue instance中的资料变化渲染到...