387. 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。
案例:
s = “leetcode”
返回 0.
s = “loveleetcode”,
返回 2.
注意事项:可以假定该字符串只包含小写字母。
思路一:string模块
import string
class Solution:
def firstUniqChar(self, s):
"""
:type s: str
:rtype: int
"""
letters = string.ascii_lowercase
index = [s.index(l) for l in letters if s.count(l) == 1]
return min(index) if len(index) else -1
思路二:set
class Solution:
def firstUniqChar(self, s):
return min([s.index(l) for l in set(s) if s.count(l) == 1] or [-1])
复杂度分析:空间复杂度O(1),时间复杂度O(n)。
汇总:string模块常用
string.ascii_uppercase 所有大写字母
string.ascii_lowercase 所有小写字母
string.ascii_letters 所有字母
string.digits 所有数字
汇总:字符串大小写
name = 'ada'
name.title() 首字母大写 → 'Ada'
name.upper() 转换为大写 → 'ADA'
name.lower() 转换为小写 → 'ada'
7. 整数反转
任意整数每位的数字倒转,如:-1230 输出 -321
假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。
思路:将数字转成字符串后利用列表功能进行倒转,注意0和负号的特殊处理。
重点:列表顺序相反操作 x[len(x)-1::-1],从最左到第len(x)项倒转,如x = [-1230], len(x) - 1 = 4, x[4::-1] = [0321-]
def reverse(x):
"""
:type x: int
"""
if x == 0:
return 0
else:
str_x = str(x)
x = ''
if str_x[0] == '-':
x += '-'
x += str_x[len(str_x)-1::-1].lstrip("0").rstrip("-")
x = int(x)
if -2**31 <= x <= 2**31-1:
return x
else:
return 0
汇总:截取字符串(切片)
str = '012345'
str[0:3] 截取前3位字符 → '012'
str[:] 截取字符串的全部字符 → '012345'
str[3:] 截取第4个字符到结尾 → '345'
str[:-2] 截取从头开始到倒数第2个字符之前 → '0123'
str[2] 截取第三个字符 → '2'
str[-1] 截取倒数第一个字符 → '5'
str[::-1] 创造一个与原字符串顺序相反的字符串 → '543210'
str[-3:-1] 截取倒数第三位与倒数第一位之前的字符 → '34' (含左不含右)
str[-3:] 截取倒数三位 → '345'
str[:-5:-3] 逆序截取 → '52'
str[:-5:-1] 逆序截取 → '5432'
汇总:删除空格和换行符(暂时删除,不更改变量值)
s = ' string '
s.strip() 删除空格和换行符 → 'string'
s.strip('in') 删除某个字符串 → ' strg '
s.lstrip() 删除左边的空格和换行符 → 'string '
s.rstrip() 删除右边的空格和换行符 → ' string'