今天这一题是将一个字元阵列翻转过来,题目看似很单纯,但也有一些技巧和知识在其中可以使用的!有感於题目中范例如果用程序码包起来,会导致某些单词被认为是程序用语而颜色不同不便阅读,因此在之後的题目范例会用引用的方式,希望能增加可读性。
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)。
以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 建置
rdt 可靠资料传输协定 由於运输层(transport)的下面那一层~网路层(network)的传...
本文同步刊载於我的部落格:安装 Zorin OS 16 Core 与呒虾米 – jute 前言 Zo...
20 - Design Pattern(1) - Decorator Decorator patte...
KNN简单说明 为一种监督学习的方法,其原理就好像物以类聚一样,相同的东西会聚在一起 我们可以设定一...
昨天我们讲了Vue的一生,今天来说说模板语法,看看要怎麽把vue instance中的资料变化渲染到...