代码随想录算法训练营第七天 | 344.反转字符串 541. 反转字符串II 卡码网:54.替换数字
学习内容:
344.反转字符串
双指针
classSolution:defreverseString(self,s:List[str])->None:""" Do not return anything, modify s in-place instead. """left=0right=len(s)-1whileleft<right:s[left],s[right]=s[right],s[left]left+=1right-=1returns学习心得:直接用双指针从两端交换元素,往中间靠。
- 反转字符串II
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符,再重新计数。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
classSolution:defreverseStr(self,s:str,k:int)->str:defreversesubstring(text):left,right=0,len(text)-1whileleft<right:text[left],text[right]=text[right],text[left]left+=1right-=1returntext res=list(s)foriinrange(0,len(s),2*k):res[i:i+k]=reversesubstring(res[i:i+k])return"".join(res)学习心得:先定义一个反转函数实现很简单用双指针,list()将字符串 s 转换为字符列表。之后for循环 i in range(0, len(s), 2 * k): res[i : i + k] = reverse(res[i : i + k])。这里注意一个特性 res[i : i + k] 当i+k超出字符串长度,将会返回最后的几个字符。
‘’.join(res) 是 Python 中将字符列表拼接成字符串的常用方法。
卡码网:54.替换数字
给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
例如,对于输入字符串 “a1b2c3”,函数应该将其转换为 “anumberbnumbercnumber”。
对于输入字符串 “a5b”,函数应该将其转换为 “anumberb”
输入:一个字符串 s,s 仅包含小写字母和数字字符。
输出:打印一个新的字符串,其中每个数字字符都被替换为了number
样例输入:a1b2c3
样例输出:anumberbnumbercnumber
数据范围:1 <= s.length < 10000。
s=input()result=[]forchins:ifch.isdigit():result.append("number")else:result.append(ch)result="".join(result)print(result)双指针
classSolution(object):defsubsitute_numbers(self,s):""" :type s: str :rtype: str """count=sum(1forcharinsifchar.isdigit())# 统计数字的个数expand_len=len(s)+(count*5)# 计算扩充后字符串的大小, x->number, 每有一个数字就要增加五个长度res=['']*expand_len new_index=expand_len-1# 指向扩充后字符串末尾old_index=len(s)-1# 指向原字符串末尾whileold_index>=0:# 从后往前, 遇到数字替换成“number”ifs[old_index].isdigit():res[new_index-5:new_index+1]="number"new_index-=6else:res[new_index]=s[old_index]new_index-=1old_index-=1return"".join(res)if__name__=="__main__":solution=Solution()whileTrue:try:s=input()result=solution.subsitute_numbers(s)print(result)exceptEOFError:break学习心得:直接循环判断替换,或者双指针。
双指针:首先计算字符串里数字的个数,isdigit()之后计算nums = len(s) + geshu * 5 得到我们需要的空字符串的总长度 res = [" "] x nums
new_index = nums - 1 old_index = len(s) - 1
进入while循环为res填字符。判断条件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)
当文件直接运行时,name的值是 “main”