算法题Python常用内置函数、方法、技巧汇总(其三:字符串)
文章目录
字符串相关操作
str
类型转int
类型
给定一个包含若干数字的字符串num_str
,如何将其转换为int
类型的num
呢?最简单的方式是使用强制类型转换,即
num_str = "12345"
num = int(num_str)
如果不允许直接使用int(num_str)
,如何使用遍历的方式,将num_str
转换成int
类型的num
呢?
可以初始化变量num
为0
,然后从左到右遍历num_str
中的每一个字符ch
,将num
扩大十倍后将加上int(ch)
的结果重新赋值给num
,直到遍历结束。代码实现如下
num_str = "12345"
num = 0
for ch in num_str:
num = num * 10 + int(ch)
注意,该技巧通常用于处理数字字符和其他字符混杂的字符串,在诸多字符串解码相关的栈题和模拟题中出现,如LC394. 字符串解码、【栈】腾讯2020春招-压缩算法、【栈】2023Q1A-解压缩算法 等题目中经常使用。
判断字符串是否均为字母、数字、或者字母或数字
字符串中的isalpha()
方法用以判断字符串中是否均为字母,isdigit()
方法用以判断字符串中是否均为数字,isalnum()
方法用以判断字符串中是否均为字母和数字,根据判断结果返回一个布尔类型。
s = "123abc"
print(s[-1].isalpha()) # True
print(s.isalpha()) # False
print(s[0].isdigit()) # True
print(s.isdigit()) # False
print(s.isalnum()) # True
由于isdigit()
方法只能判断字符串是否均为数字,所以是不能够判断负数的,在使用该方法时要注意这个问题,以免错判。如以下代码无法达到我们的要求。
s = "-10"
print(s.isdigit()) # False
如果我们确定字符串不会存在数字和其他字符混搭的情况,我们可以只取字符串的最后一个元素进行判断。这在LeetCode 150、逆波兰表达式求值 中可以用到这个技巧。
s1 = "-10"
print(s1[-1].isdigit()) # True
s2 = "10"
print(s2[-1].isdigit()) # True
s3 = "+"
print(s3[-1].isdigit()) # False
判断字符串是否均为大写或小写字母
字符串中的islower()
和isupper()
方法用以判断字符串中是否均为小写字母或大写字母,根据判断结果返回一个布尔类型。注意当字符串中同时包含大小写字母,或包含数字或其他符号时,均会返回False
。
s1 = "abc"
print(s1.islower()) # True
print(s1.isupper()) # False
s2 = "ABC"
print(s2.islower()) # False
print(s2.isupper()) # True
s3 = "aBC"
print(s3.islower()) # False
print(s3.isupper()) # False
s4 = "1"
print(s4.islower()) # False
print(s4.isupper()) # False
字母大小写转换
字符串中的lower()
和upper()
方法可以将字符串中的所有小写字母转化为大写,或者将所有大写字母转化为小写,并返回一个新的字符串,原字符串不发生改变。
s = "aBc123"
s_upper = s.upper() # 得到"ABC123"
s_lower = s.lower() # 得到"abc123"
字符串中的title()
方法可以令字符串中的所有单词的首字母大写,并返回一个新的字符串,原字符串不发生改变。这个方法的使用频率较低。
s = "i love python"
s_title = s.title() # 得到"I Love python"
替换
字符串中的replace(x, y)
方法可以将原字符串中的字符串x
替换为字符串y
,并返回一个新的字符串,原字符串不发生改变。
s = "aBc123"
s1 = s.replace("a", "d")
s2 = s.replace("123", "4")
在OD真题【栈】2023B-仿LISP运算 中对输入的字符串进行预处理的操作,就用到了replace()
方法,将单个左括号"("
和右括号")"
替换成前后带有空格的左括号" ( "
和右括号" ) "
,方便后续的分割操作。
分割
字符串中的split(x)
方法以字符串x
为分割符,将原字符串分割为一个新的列表并返回,原字符串不发生改变。如果不传入参数x
,则默认为按照空格" "
进行分割。最常用的分隔符为空格" "
或者逗号","
。
s = "1 2 3 4 5"
lst = s.split()
# 等价于lst = s.split(" ")
s = "1,2,3,4,5"
lst = s.split(",")
# 两种分割均会得到lst = ["1", "2", "3", "4", "5"]
合并
字符串中的join(lst)
方法以原字符串为合并符,将列表lst
合并为一个新的字符串并返回。注意lst
中的元素必须是字符串。最常用的合并符为空字符串""
、空格字符串" "
。
lst = ["a", "b", "c"]
s = "".join(lst)
# 会得到s = "abc"
s_space = " ".join(lst)
# 会得到s_space = "a b c"
s_star = "*".join(lst)
# 会得到s_star = "a*b*c"
字符串的分割与合并是一对相互对应的操作,常用于列表与字符串之间的相互转换。
注意:
- 字符串属于一种不可变数据类型,并不能直接进行修改操作。当题目要求对一个字符串进行修改时,通常会先将原字符串使用
split()
方法或list()
转化成列表,对列表修改后再使用join()
方法得到新字符串的方式来实现。 - 列表
lst
必须是一个字符串类型列表,即lst: List[str]
。如果lst
是一个整数类型列表,直接使用语句"".join(lst)
会出现类型错误TypeError
。如需进行合并操作,必须使用map()
内置函数对lst
中的元素进行类型转换,将lst
中的所有int
类型元素转换成str
类型。即
lst = [0, 4, 2]
s = "".join(map(str, lst)) # 得到s = "042"
华为OD算法/大厂面试高频题算法练习冲刺训练
-
华为OD算法/大厂面试高频题算法冲刺训练目前开始常态化报名!目前已服务100+同学成功上岸!
-
课程讲师为全网50w+粉丝编程博主@吴师兄学算法 以及小红书头部编程博主@闭着眼睛学数理化
-
每期人数维持在20人内,保证能够最大限度地满足到每一个同学的需求,达到和1v1同样的学习效果!
-
60+天陪伴式学习,40+直播课时,300+动画图解视频,300+LeetCode经典题,200+华为OD真题/大厂真题,还有简历修改、模拟面试、专属HR对接将为你解锁
-
可上全网独家的欧弟OJ系统练习华子OD、大厂真题
-
可查看链接 大厂真题汇总 & OD真题汇总(持续更新)
-
绿色聊天软件戳
od1336
了解更多
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!