给定一个字符串 s,它包含小写字母和数字字符,请编写一个函数,将字符串中的字母字符保持不变,而将每个数字字符替换为number。
例如,对于输入字符串 "a1b2c3",函数应该将其转换为 "anumberbnumbercnumber"。
对于输入字符串 "a5b",函数应该将其转换为 "anumberb"
输入:一个字符串 s,s 仅包含小写字母和数字字符。
输出:打印一个新的字符串,其中每个数字字符都被替换为了number
样例输入:a1b2c3
样例输出:anumberbnumbercnumber
数据范围:1 <= s.length < 10000。
思路:
先把数组的长度扩大到新数组的长度(数一下有几个数字,就增加数字数量*5的长度)
从后向前遍历。(因为,如果从前向后遍历,每次都要把后面的元素往后移动,时间复杂度是O(n^2)
双指针,left遍历旧数组,right遍历新数组。
当left遇到字母,就把它放到新数组right的位置,right-=1,left-=1
当left遇到数字,就把number按照从后往前的顺序,加入新数组,right逐步减1. 然后left-=1
继续这种操作,直到left==0,right==0.
但是用Python,有另一种解法。Python中string是不可修改的,所以先把str变成list。
然后str里的每个元素,就是list里的元素。
遍历list中的元素,一旦遇到数字,就把它变成‘number’
最后把list中的元素连接起来,变成str,就完成了。
代码:
class Solution:
def change(self, s):
s = list(s)
for i in range(len(s)):
if i.isdigit():
s[i] = 'number'
return ''.join(s)
错误点:
这个问题出现过好几次。就是要分清元素的下标,和元素本身,的区别。
应该是 if s[i].isdigit( )
修改后:
class Solution:
def change(self, s):
s = list(s)
for i in range(len(s)):
if s[i].isdigit():
s[i] = 'number'
return ''.join(s)