python对于字符串的索引处理很高效;不同编程语言确实有很多可以用来优化的技巧。
151. 反转字符串中的单词
class Solution:
def reverseWords(self, s: str) -> str:
# 先整体交换,然后再遇到空格就交换前面的
# s = s[::-1].strip()
# res = " ".join(word[::-1] for word in s.split())
# return res
words = s.split()
left, right = 0, len(words) -1
while left < right:
words[left], words[right] = words[right], words[left]
left += 1
right -= 1
return " ".join(word for word in words)
55. 右旋字符串(第八期模拟笔试)
pyhton这道题因为有字符串索引就比较好做,普通解法的话:先整体交换,然后分成两段局部交换(前面的 n n n个字符reverse,后面的 l e n ( s ) − n len(s)-n len(s)−n个字符reverse)
n=int(input())
s=input()
temp = len(s)-n
print(s[temp:]+s[:temp])
28. 找出字符串中第一个匹配项的下标
leetcode 28. 找出字符串中第一个匹配项的下标
代码随想录
kmp算法上线初探,next数组的定义最长相等前后缀的长度;当失败匹配的时候,进行回退next[j-1]存放的就是该回退到哪里。
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
nextArray = [0] * len(needle)
j = 0 # 下一次改匹配的位置
for i in range(1,len(needle)):
# 寻找next数组的时候,i=1,与使用的时候不同
while j > 0 and needle[i:i+1] != needle[j:j+1]:
j = nextArray[j - 1]
if needle[i:i+1] == needle[j:j+1]:
j += 1
nextArray[i] = j
# print(nextArray)
j = 0
for i in range(len(haystack)):
while j > 0 and haystack[i:i+1] != needle[j:j+1]:
j = nextArray[j - 1]
if haystack[i:i+1] == needle[j:j+1]:
j += 1
if j==len(needle):
return i - len(needle) + 1
return -1