文章链接:代码随想录
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
return s
541. 反转字符串II
状态:自己试着解题,但是考虑的比较复杂,没有完全理清思路;之后看视频之后理清了思路
思路:沿用344.反转字符串中的reverse()函数思想,将字符串转换为list后,通过切片方式将字符串进行反转操作
总结:
1. 遍历字符串的步进设置为2*k,来判断是否有需要反转的区间
2. Python中, 对字符串 s='abc' 使用 s[0:99]时,返回的仍是 'abc'。
解释:字符串末尾如果超过最大长度,则会返回至字符串最后一个值,避免了边界条件的处理
3. 在Python中字符串是不可变的,不能像操作列表或字典那样,直接对字符串的某个位置上的字符进行赋值,例如s[0] = 'a', s[0:2] = s[0:2][0:2:-1]等是非法操作。因此,本题中要先将str转换为list,再用切片进行替换。另外,返回值需要用join()函数将处理好的list转换为字符串(关于join()函数可参考:Python join()方法 | 菜鸟教程)
4. 时间复杂度O(n), 空间复杂度O(n)
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverse(string):
left, right = 0, len(string) - 1
while left < right:
string[left], string[right] = string[right], string[left]
left += 1
right -= 1
return string
s1 = list(s)
for i in range(0, len(s), 2*k):
s1[i:i+k] = reverse(s1[i:i+k])
return ''.join(s1)
卡码网:54.替换数字
状态:有思路,但是对ACM模式不够熟悉,导致解题时遇到问题
思路:先将str转换为list,一个for循环遍历list,找到数字字符并将其转换为‘number'
总结:
1. 判断是否为数字字符,可直接用 .isdigit()函数
2. ACM模式下的输入输出可以有多种形式,都要熟悉掌握
3. 时间复杂度O(n), 空间复杂度O(n)
# class Solution:
# def change(self, s):
# res = list(s)
# for i in range(len(res)):
# if res[i].isdigit():
# res[i] = "number"
# return ''.join(res)
# sol = Solution()
# s = input()
# result = sol.change(s)
# print(result)
s = input()
lst = list(s)
for i in range(len(lst)):
if lst[i].isdigit():
lst[i] = 'number'
print( ''.join(lst))