344.反转字符串
- 思路:采用双指针不断交换收尾字符直至收尾指针相遇。
- 代码:
class Solution:
def reverseString(self, s: List[str]) -> None:
"""
Do not return anything, modify s in-place instead.
"""
head, tail = 0, len(s)-1
while head < tail:
tmp = s[head]
s[head] = s[tail]
s[tail] = tmp
head += 1
tail -= 1
return s
541. 反转字符串II
- 思路:
内核和344反转字符串一样,重点在于如何找到待反转的s_list。
- 找反转s_list的思路:
1)s是str不能直接进行翻转操作,需要将其转化为list;
2)每遍历2k次时,left和right的变化列表可得:
3)当i以2k的步长从0到n,此时翻转的那部分数组的左下标为i,右下标为i + k - 1,将这部分数组放入翻转数组的函数中处理即可。值得注意的是,right的最大值为n-1,因此可以用min(i +k -1, n - 1)作为右下标;当右下标取n - 1时,i = n - k,即完成最后一次的翻转,循环结束。
class Solution:
def reverseStr(self, s: str, k: int) -> str:
def reverse(left, right, s_list):
while left < right:
s_list[left], s_list[right] = s_list[right], s_list[left]
left += 1
right -= 1
s_list = list(s)
n = len(s_list)
for i in range(0, n, 2*k):
reverse(i, min(i + k - 1, n - 1), s_list)
return ''.join(s_list)
卡码网:54.替换数字
卡码网均为ACM模式(不是leetcode上面那种核心代码模式)
1)实例化对象 sol = Solution()
2)设定输入值 s = input()
3)调用实例并输出结果 res = sol.replaceNumber(s) print(s)
注意:最后的结果是打印出来的。
class Solution:
def replaceNumber(self, s):
l = list(s)
n = len(l)
for i in range(n):
if l[i] in ['1','2','3','4','5','6','7','8','9']:
l[i] = 'number'
return ''.join(l)
sol=Solution()
s=input()
result=sol.replaceNumber(s)
print(result)
151.翻转字符串里的单词
- 思路:去除字符串里面多余的空格,反转字符。
- 注意:split只能去除单词之间多余的空格,不能去除收尾空格,因此收尾空格用strip()去除。
- 注意:split空格中不需要输入任何参数。
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip()
s_list = s.split()
l, r = 0, len(s_list) - 1
while l < r:
s_list[l], s_list[r] = s_list[r], s_list[l]
l += 1
r -= 1
return ' '.join(s_list)
卡码网:55.右旋转字符串
- 思路1:先将s翻转,随后将s切片为s1和s2, s1和s2执行“反转字符串”,拼接s1和s2。
k = int(input())
s = input()
l = list()
def reverseStr(s):
s_list = list(s)
l, r = 0, len(s_list)-1
while l < r:
s_list[l],s_list[r] = s_list[r],s_list[l]
l += 1
r -= 1
return ''.join(s_list)
s = s[::-1]
s1 = s[:k]
s2 = s[k:]
s1 = reverseStr(s1)
s2 = reverseStr(s2)
s = s1 + s2
print(s)
- 思路2:直接用切片拼接。
k = int(input()) # 输入数字
s = input() # 输入字符串
length = len(s)
s = s[length-k:] + s[:length-k] # 右旋
print(s)