344.反转字符串
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
left=0;right=len(s)-1
while left<=right:
s[left],s[right]=s[right],s[left]
left+=1
right-=1
return s
541.反转字符串
本题解决的关键在于要将操作放在整个切片上去移动,如果单纯按照题干的要求,可能会陷入逻辑陷阱中
class Solution:
def reverseStr(self, s: str, k: int) -> str:
n=len(s);cnt=0
for i in range(n):
def reverse_substring(text):
left=0;right=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]=reverse_substring(res[i:i+k])
return "".join(res)
替换数字
数组填充类问题,典型做法都是先给数组扩容成填充后的大小,再从后向前进行操作。这样做的好处是:避免了从前往后填充数组时,每次都需要将填充之后的元素向后移动的问题。
大概的想法:先搞一个新的列表,长度为扩容后的列表的长度。然后得到老的列表的长度和新的列表的长度的索引。然后从后往前去判断老的位置的索引是否是数字,是的话将新的列表的对应位置的值填写成"number"字符。否则就将老的列表对应位置的值赋给新的列表。
def subsitute(s):
count=sum(1 for char in s if char.isdigit())
expand_len=len(s)+count*5
res=['']*expand_len
old_index=len(s)-1;new_index=expand_len-1
while old_index >= 0:
if s[old_index].isdigit():
res[new_index-5:new_index+1]="number"
new_index-=6
else:
res[new_index]=s[old_index]
new_index-=1
old_index-=1
return "".join(res)
while True:
try:
s=input()
result=subsitute(s)
print(result)
except EOFError:
break