算法题Python常用内置函数、方法、技巧汇总(其三:字符串)

2023-12-27 06:56:34

字符串相关操作

str类型转int类型

给定一个包含若干数字的字符串num_str,如何将其转换为int类型的num呢?最简单的方式是使用强制类型转换,即

num_str = "12345"
num = int(num_str)

如果不允许直接使用int(num_str),如何使用遍历的方式,将num_str转换成int类型的num呢?

可以初始化变量num0,然后从左到右遍历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"

字符串的分割与合并是一对相互对应的操作,常用于列表与字符串之间的相互转换。

注意:

  1. 字符串属于一种不可变数据类型,并不能直接进行修改操作。当题目要求对一个字符串进行修改时,通常会先将原字符串使用split()方法或list()转化成列表,对列表修改后再使用join()方法得到新字符串的方式来实现。
  2. 列表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了解更多

文章来源:https://blog.csdn.net/weixin_48157259/article/details/135222843
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。