344.反转字符串
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
#双指针
n=len(s)
for i in range(n//2):
s[i],s[n-i-1]=s[n - i - 1], s[i]
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
#使用栈
stack=[]
for char in s:
stack.append(char)
for i in range(len(s)):
s[i]=stack.pop()
541.反转字符串II
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s=list(s)
for i in range(0,len(s),2*k):
if i+k<=len(s):#当长度为3,i=0,k=3
s[i:i+k]=s[i:i+k][::-1]
continue
s[i:len(s)]=s[i:len(s)][::-1]
ans=""
for i in s:
ans=ans+i
return ans
对于字符串s = 'abc',如果使用s[0:999] ===> 'abc'。字符串末尾如果超过最大长度,则会返回至字符串最后一个值,这个特性可以避免一些边界条件的处理
54.替换数字
其实很多数组填充类的问题,其做法都是先预先给数组扩容带填充后的大小,然后在从后向前进行操作。
这么做有两个好处:
- 不用申请新数组。
- 从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。
在Python中,ord()函数返回给定字符的Unicode代码点,通过比较'i'的Unicode代码点与'0'和'9'的代码点,可以检查'i'是否是一个数字。如果'i'的Unicode代码点在'0'和'9'的代码点之间,那么'i'就是一个数字。
str1=input()
ans=""
for i in str1:
if ord("0")<=ord(i)<=ord("9"):
ans+="number"
else:
ans+=i
print(ans)
151.反转字符串里的单词
想一下,我们将整个字符串都反转过来,那么单词的顺序指定是倒序了,只不过单词本身也倒序了,那么再把单词反转一下,单词不就正过来了。
class Solution:
def reverseWords(self, s: str) -> str:
# 删除前后空白,但没有删除中间的空白
s = s.strip()
# 反转整个字符串
s = s[::-1]
# 将字符串拆分为单词,并反转每个单词
s = ' '.join(word[::-1] for word in s.split())
return s
双指针移除空格,类似双指针移除元素,空间复杂O(1)
class Solution:
def reverseWords(self, s: str) -> str:
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(words)#内部要有空格
55.右旋转字符串
可直接用索引搞定,其余请见链接
其实,思路就是 通过 整体倒叙,把两段子串顺序颠倒,两个段子串里的的字符在倒叙一把,负负得正,这样就不影响子串里面字符的顺序了。
n=int(input())
str_1=input()
print(str_1[len(str_1)-n:]+str_1[:len(str_1)-n])