字符串本身不是一种数据结构,但是由于其本身特殊性,可以产生很多特殊的算法题,另外,字符串在工程里也有非常广泛的应用,厦门就两个常见问题进行分析。
1、字符串转换为小写字母,参考Leetcode709,给定一个字符串将其中的大写字母转换为小写字母。该题的关键是已知小写字母的ASCII码是大写字母的ASCII码+32,只需要判断字符串是否为大写字母,然后进行修改即可,因为字符串不能直接进行修改,因此现需要转换为列表再进行修改。
class Solution:
def toLowerCase(self, s: str) -> str:
chars = list(s)
for i in range(len(chars)):
if ord(chars[i]) >= 65 and ord(chars[i]) <= 90:
chars[i] = chr(ord(chars[i]) + 32)
return "".join(chars)
2、字符串转换成整数,参考Leetcode8,本题先需要处理字符串,再需要处理字符串转成数字溢出的问题。对于字符串处理,1、去除先导的空格。2、判断第一个字母是否为符号或者数字。3、依次转为数字直到出现第一个非数字结束。
class Solution:
def myAtoi(self, s: str) -> int:
# 去除空格字符串
s = s.strip()
# 判断是否为空
if not s:
return 0
# 判断第一个字符
if s[0] not in '+-0123456789':
return 0
# 处理第一个字符
flag = 1
if s[0] == '-':
flag = -1
s = s[1:]
elif s[0] == '+':
s = s[1:]
# 处理溢出问题
num = 0
for c in s:
if c not in '0123456789':
break
num = num * 10 + int(c)
return flag * min(num, 2**31-1) if flag == 1 else flag * min(num, 2**31)