浅记录一下,我今天开始改为python了。。。
1.344.反转字符串
版本一:使用双指针
class Solution(object):
def reverseString(self, s):
"""
:type s: List[str]
:rtype: 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
版本二:使用栈
stack = []
for char in s:
stack.append(char)
for i in range(len(s)):
s[i] = stack.pop()
版本三:使用range
n = len(s)
for i in range(n // 2):
s[i], s[n - i - 1] = s[n - i - 1], s[i]
版本四:使用reversed
s[:] = reversed(s)
版本五:使用切片
s[:] = s[::-1]
版本六:列表推导
s[:] = [s[i] for i in range(len(s) - 1, -1, -1)]
版本七:使用reverse()
s.reverse()
2.541. 反转字符串II
思路:当需要固定规律一段一段去处理字符串的时候,要想想在for循环的表达式上做文章。在遍历字符串的时候,让cur每次移动 2*k 就行,然后判断需要反转的区间。
class Solution(object):
def reverseStr(self, s, k):
"""
:type s: str
:type k: int
:rtype: str
"""
def reverse_substr(text):
left, right = 0, len(text) - 1
while left < right:
text[left], text[right] = text[right], text[left]
left += 1
right -= 1
return text
res = list(s)
for cur in range(0, len(s), 2 * k):
res[cur: cur + k] = reverse_substr(res[cur: cur + k])
return ''.join(res)
Python3 (v2):
class Solution:
def reverseStr(self, s: str, k: int) -> str:
# Two pointers. Another is inside the loop.
p = 0
while p < len(s):
p2 = p + k
# Written in this could be more pythonic.
s = s[:p] + s[p: p2][::-1] + s[p2:]
p = p + 2 * k
return s
3.替换数字
错误:不能直接在循环中修改 i,因为在这种情况下 i 是一个临时变量,修改它并不会改变 lst 中的对应元素
if i <= '9' and i >= '0':
i = 'number'
class Solution:
def change(self, s):
lst = list(s)
for i in range(len(lst)):
if lst[i].isdigit:
lst[i] = "number"
return ''.join(lst)
卡码网光写出这部分会一直显示答案错误,我看评论多了函数的调用,我试了一下还是不行,之中再看那个格式吧。
2024.6.29
看了今天的答案,卡码网是要有输入输出的,可以通过的版本如下:
s = input()
lst = list(s)
for i in range(len(s)):
if lst[i].isdigit():
lst[i] = 'number'
print(''.join(lst))