字符串
344.反转字符串
题目描述: 344.反转字符串.
解法
双指针
class Solution(object):
def reverseString(self, s):
left, right = 0, len(s)-1
while left <= right:
s[left],s[right] = s[right], s[left]
left+=1
right-=1
return s
栈
class Solution(object):
def reverseString(self, s):
res = []
for i in s:
res.append(i)
for i in range(len(s)):
s[i] = res.pop()
return s
range法(其实也是双指针)
class Solution(object):
def reverseString(self, s):
for i in range(len(s)//2):
s[i],s[len(s)-1-i] = s[len(s)-1-i],s[i]
reversed法
class Solution(object):
def reverseString(self, s):
s[:] = reversed(s)
切片
class Solution(object):
def reverseString(self, s):
s[:] = s[::-1]
列表推导
class Solution(object):
def reverseString(self, s):
s[:] = [s[i] for i in range(len(s)-1,-1,-1)]
541. 反转字符串II
题目描述: 541. 反转字符串II.
解法
class Solution(object):
def reverseStr(self, s, k):
def reversek(text):
left, right = 0, 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] = reversek(res[i:i+k])
return ''.join(res)
不要过度简洁,也不要过度复杂。
剑指Offer05.替换空格
题目描述: 剑指Offer05.替换空格.
解法
双指针
class Solution(object):
def replaceSpace(self, s):
counter = s.count(' ')
res = list(s)
res.extend([' ']*counter*2)
j = len(res)-1
for i in range(len(s)-1,-1,-1):
if res[i] == ' ':
res[j-2:j+1] = "%20"
j-=2
else:
res[j] = res[i]
j -= 1
return ''.join(res)
填充,替换等问题,用双指针效果不错
151.翻转字符串里的单词
题目描述: 151.翻转字符串里的单词.
解法
先全部翻转,再翻转单词
class Solution(object):
def reverseWords(self, s):
s = s.strip()
s = s[::-1]
return ' '.join([word[::-1] for word in s.split()])
直接翻转所有单词的顺序
class Solution(object):
def reverseWords(self, s):
text = s.split()
left = 0
right = len(text)-1
while left < right:
text[left],text[right] = text[right], text[left]
left += 1
right -= 1
return ' '.join(text)
剑指Offer58-II.左旋转字符串
题目描述: 剑指Offer58-II.左旋转字符串.
解法
切片
class Solution(object):
def reverseLeftWords(self, s, n):
return s[n:] + s[:n]
python处理字符串的技巧太多了,有点混乱,感觉python应对字符串的操作还是很容易的,只要确定思路就好