classSolution(object): defreverseString( s): left,right=0,len(s)-1 while left<right: s[left],s[right]=s[right],s[left] left+=1 right-=1 return s
541.反转字符串 II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
1 2
输入:s = "abcdefg", k = 2 输出:"bacdfeg"
示例 2:
1 2
输入:s = "abcd", k = 2 输出:"bacd"
思路:
定义一个翻转函数
for循环遍历步距为2k
对i:i+k元素重新赋值
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution(object): defreverseStr(s, k):
defreverse(s): left, right = 0, len(s) - 1 while left < right: s[left], s[right] = s[right], s[left] left += 1 right -= 1 return s s=list(s) for i inrange(0,len(s),2*k): s[i:i+k]=reverse(s[i:i+k])
classSolution: # 1.去除多余的空格 deftrim_spaces(self, s): n = len(s) left = 0 right = n - 1
while left <= right and s[left] == ' ': # 去除开头的空格 left += 1 while left <= right and s[right] == ' ': # 去除结尾的空格 right -= 1 tmp = [] while left <= right: # 去除单词中间多余的空格 if s[left] != ' ': tmp.append(s[left]) elif tmp[-1] != ' ': # 当前位置是空格,但是相邻的上一个位置不是空格,则该空格是合理的 tmp.append(s[left]) left += 1 return tmp
# 2.翻转字符数组 defreverse_string(self, nums, left, right): while left < right: nums[left], nums[right] = nums[right], nums[left] left += 1 right -= 1 returnNone
# 3.翻转每个单词 defreverse_each_word(self, nums): start = 0 end = 0 n = len(nums) while start < n: while end < n and nums[end] != ' ': end += 1 self.reverse_string(nums, start, end - 1) start = end + 1 end += 1 returnNone
classSolution(object): defstrStr(self, haystack, needle): """ :type haystack: str :type needle: str :rtype: int """ m,n=len(haystack),len(needle) for i inrange(m): if haystack[i:i+n]==needle: return i return -1