题目由 bet9链接 вт989点сс 编译原创。
题目叙述Reverse String
给定一个输入字串阵列,要求我们反转整个字串阵列,并且必须是in-place原位操作,只能使用O(1)常数空间的演算法来完成。
测试范例
示例 1:
输入:s = [ “h” ,“e” ,“l” ,“l” ,“o” ]输出:[ “o” ,“l” ,“l” ,“e” ,“h” ]
示例 2:
输入:s = [ “H” ,“a” ,“n” ,“n” ,“a” ,“h” ]输出:[ “h” ,“a” ,“n” ,“n” ,“a” ,“H” ]
约束条件
限制:
1 <= s.length <= 10^5
输入字串阵列长度介于1~十万之间。
s[i]
是可打印的 ascii 字符
每个阵列元素都是可列印的ASCII字元
观察
反转整个字元,相当于顺序颠倒,头尾对调。
例如: hello <-> olleh
示意图
演算法双指针Two pointers
建立左、右两个指针,初始化呈第一个索引和最后一个索引。
每回合对调左右两个指针对应到的字元,并且逐渐往中心靠拢,由外而内进行反转。
程式码双指针Two pointers
class Solution : def reverseString (self ,s :List [ str ] )- > None : #一个指向头部位置,另一个指向尾部位置 left ,right = 0 ,len (s )-1 # 通过两个指针反转字符串while left < right : s [ left ] ,s [ right ] = s [ right ] ,s [ left ] left ,right = left + 1 ,right - 1
复杂度分析
时间复杂度: O(n)
最多只需要O(n/2)次对调,即可完成整个字串阵列的反转。
空间复杂度: O(1)
使用的都是固定尺寸的临时变数,所需空间为O(1)常数级别。