
思路:.reverse()秒了
或者前后指针依次交换即可
python
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left,right = 0,len(s)-1
while left<right:
s[left],s[right] = s[right],s[left]
left += 1
right -= 1

思想:准备分类讨论,但是比较复杂,也能做。注意要转成列表进行切片,字符串无法修改
null
class Solution:
def reverseStr(self, s: str, k: int) -> str:
n = len(s)
s = list(s)
i = 0
while n-i >= 2*k:
s[i:i+k] = s[i:i+k][::-1]
i+=2*k
if n-i<2*k:
s[i:i+k] = s[i:i+k][::-1]
return ''.join(s)
考虑当切片超出列表长度时,Python会自动截断
null
class Solution:
def reverseStr(self, s: str, k: int) -> str:
n = len(s)
s = list(s)
for i in range(0,n,2*k):
s[i:i+k] = s[i:i+k][::-1]
return ''.join(s)
- 替换数字(第八期模拟笔试)

思路:字符串转化为list,遍历list,找到ord(i)在ord(0)和ord(9)之间的,就执行列表的切片相加。最后返回即可
python
s = list(input())
n = len(s)
for i in range(n):
if 48<= ord(s[i]) <=57:
s = s[:i]+['number']+s[i+1:]
print(''.join(s))
python
s = list(input())
n = len(s)
for i in range(n):
if ord('0')<= ord(s[i]) <=ord('9'):
s = s[:i]+['number']+s[i+1:]
print(''.join(s))

思路:无所谓,.split()会去除所有的空格,无需担心
null
class Solution:
def reverseWords(self, s: str) -> str:
sen = list(s.split())
sen.reverse()
return ' '.join(sen)
- 右旋字符串(第八期模拟笔试)

思路:操作题,切片相加就行
null
k = int(input())
s = list(input())
s = s[-k:]+s[:len(s)-k]
print(''.join(s))

思路:短的字符串切了去长的字符串里面找,简明易懂,且正确(KPM叽里咕噜说啥呢)
python
class Solution:
def strStr(self, haystack: str, needle: str) -> int:
m,n = len(haystack),len(needle)
for i in range(0,m-n+1):
if needle == haystack[i:i+n]:
return i
else:
return -1

思路:简单题也没思路吗,可恶
s如果有两个及以上的子集,那么s一定在s+s去头去尾里面。防止s搜到他自己。不用find哈,万一在0位置检索到很尴尬
python
class Solution:
def repeatedSubstringPattern(self, s: str) -> bool:
new_s = s + s
return True if s in new_s[1:len(new_s)-1] else False