题目和思路:
一、344.反转字符串
双指针
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
l, r = 0, len(s) - 1
while l < r:
s[l], s[r] = s[r], s[l]
l += 1
r -= 1
二、541. 反转字符串II
class Solution:
def reverseStr(self, s: str, k: int) -> str:
length = len(s)
res = ''
t = length // (2 * k)
tail = length % (2 * k)
for i in range(t):
res = res + s[i*2*k:i*2*k+k][::-1] + s[i*2*k+k:i*2*k+2*k]
if tail <= k:
res = res + s[length-tail:][::-1]
else:
res = res + s[length-tail:length-tail+k][::-1] + s[length - tail + k:]
return res
由于字符串不可变,切片操作很麻烦。写代码时遇到问题有:反向切片的时候起始点也得反向,但是可以用s[a:b][::-1]代替。自己想复杂了,其实for i in range(0,length,2*k)即可。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
s = list(s)
for i in range(0, len(s), 2 * k):
s[i:i + k] = reversed(s[i:i + k])
return ''.join(s)
三、卡码网:54.替换数字
import sys
class Solution:
def transform_string(s):
return ''.join('number' if ord(char) - ord('0') in range(10) else char for char in s)
def process_input():
for line in sys.stdin:
print(Solution.transform_string(line.strip()))
if __name__ == "__main__":
Solution.process_input()
主要练习acm输入输出吧,python感觉这题练不了?
四:151.翻转字符串里的单词
还是练不了???
class Solution:
def reverseWords(self, s: str) -> str:
return ' '.join(s.split()[::-1])
五:卡码网:55.右旋转字符串
练不了一点
import sys
class Solution:
def right_rotate_string(s, k):
k = k % len(s)
return s[-k:] + s[:-k]
def process_input():
while True:
k_line = sys.stdin.readline()
if not k_line:
break
k = int(k_line.strip())
s = sys.stdin.readline().strip()
if not s:
break
result = Solution.right_rotate_string(s, k)
print(result)
if __name__ == "__main__":
Solution.process_input()
今日总结:
感觉python不是很能练到今天的思路,都看了一遍。
本文介绍了Python中反转字符串的多种方法,包括使用双指针、切片操作、列表转换,以及处理ACM输入输出的实例,如单词反转和右旋转字符串。作者提到Python在某些问题上的局限性,认为对于特定算法训练可能不够理想。
916

被折叠的 条评论
为什么被折叠?



