字符串part01(24.01.03)
安排:先独立做题,然后看视频讲解,然后看文章讲解,然后再重新做一遍题,把题目AC,最后整理成今日当天的博客。
- 学习时长:3小时
- 学习内容:自己尝试+pdf说明+视频+力扣题解+自己默写
- 学习感悟:python语句还怪简单的
344.反转字符串
题目链接:力扣题目链接
笔记:
1.双指针首尾同时向中间移动,两两交换。
2.字符串也是一种数组,所以元素在内存中是连续分布,这就决定了反转链表和反转字符串方式上还是有所差异的。
提交代码:
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
541. 反转字符串II
题目链接:力扣题目链接
笔记:
1.系统自带的库函数涉及区间都是左闭右开的。
2.对于代码的一些解释:
s[:p]
表示字符串 s 中从索引 0 到索引 p(不包括 p)的部分。s[p: p2]
表示字符串 s 中从索引 p 到索引 p2(不包括 p2)的部分。[::-1]
是 Python 中用来对序列进行反转的操作符。+
是字符串连接操作符。s[p2:]
表示字符串 s 中从索引 p2 开始到结尾的部分。- 操作行代码的作用是:将字符串 s 中从索引 p 到索引 p2(不包括 p2)的部分进行反转,然后将反转后的部分与原字符串 s 中其他部分拼接起来,并将结果赋值给变量 s。
提交代码:
class Solution:
def reverseStr(self, s: str, k: int) -> str:
p = 0
while p < len(s):
p2 = p + k
s = s[:p] + s[p:p2][::-1] + s[p2:]
p += 2*k
return s
卡码网:54.替换数字
题目链接:卡码网题目链接
笔记:
1.熟悉一下真正在python中可运行的代码的写法!
2.if ord("0") <= ord(ss) <= ord("9"):
ord("0")
和ord("9")
分别代表字符 "0" 和 "9" 的 ASCII 值。ord(ss)
获取当前字符ss
的 ASCII 值。- 这个条件判断语句检查当前字符是否在数字 "0" 到 "9" 的 ASCII 范围内。
提交代码:
str1 = input()
ans = ''
for ss in str1:
if ord('0')<=ord(ss)<=ord('9'):
ans += 'number'
else:
ans += ss
print(ans)
151.翻转字符串里的单词
题目链接:力扣题目链接
笔记:可以直接用库函数,也可以用双指针法
1.库函数:先删除空白,然后整个反转,最后单词反转。 因为字符串是不可变类型,所以反转单词的时候,需要将其转换成列表,然后通过join函数再将其转换成字符串,所以空间复杂度不是O(1)。s = s.strip()
: 移除字符串两端的空格。s = ' '.join(word[::-1] for word in s.split())
: 将字符串拆分为单词,然后反转每个单词,最后用空格将它们连接起来。
2.双指针法:类似移除元素的方法
提交代码:
class Solution:
def reverseWords(self, s: str) -> str:
s = s.strip()
s = s[::-1]
s = ' '.join(word[::-1] for word in s.split())
return s
卡码网:55.右旋转字符串
题目链接:卡码网题目链接
笔记:
- 从用户输入获取一个整数
n
,表示字符串的旋转量。 - 从用户输入获取一个字符串
s
,表示要进行旋转操作的字符串。 - 打印将字符串
s
向左旋转n
个位置后的结果。
s[-n:]
: 这部分表示取字符串s
从倒数第n
个字符开始到末尾的子串。s[:-n]
: 这部分表示取字符串s
从开头到倒数第n
个字符的子串。+
: 将上述两个子串连接起来,实现字符串的左旋转。- 最后,通过
print
语句输出旋转后的结果。
提交代码:
n = int(input())
s = input()
print(s[-n:]+s[:-n])