体会切片的方法,以及split()后,可以按单词反转而不是字符。
344.反转字符串
方法一:双指针 class Solution(object): def reverseString(self, s): left = 0 right = len(s) - 1 while left < right: s[left], s[right] = s[right], s[left] left += 1 right -= 1 方法二:栈 stack = [] for char in s: stack.append(char) for i in range(len(s)): s[i] = stack.pop() 方法三:用二分法 用range n = len(s) for i in range(n//2): s[i],s[n-i-1] = s[n-i-1], s[i] 方法四:reversed s[:] = reversed(s) 或: s.reverse() 方法五:切片 s[:] = s[::-1]
541. 反转字符串II
重新定义了一个函数用来反转。 用range(0, len(s), 2*k),其中2k即步长。如a=[abcdefg] for i in range(0,len(a),4) , 即取出[ae]。 class Solution(object): def reverseStr(self, s, k): def reverse_string(text): left = 0 right = len(text) - 1 while left < right: text[left], text[right] = text[right], text[left] left += 1 right -= 1 return text res = list(s) for i in range(0, len(s), 2*k): res[i:i+k] = reverse_string(res[i:i+k]) return ''.join(res)
151.翻转字符串里的单词
方法一: 注意:right = len(new_s) - 1 这里要用new_s,而不是s!s是字符串not列表。 class Solution(object): def reverseWords(self, s): new_s = s.split() left = 0 right = len(new_s) - 1 while left < right: new_s[left], new_s[right] = new_s[right], new_s[left] left += 1 right -= 1 return ' '.join(new_s) 方法二: s.strip()可以不写,split会自动去掉没用的空格 class Solution(object): def reverseWords(self, s): s = s.strip() s = s[::-1] s = ' '.join(word[::-1] for word in s.split()) return s