14
查找字符串数组中的最长公共前缀。
1 | res = "" |
效率不如遍历查找来的高
58
仅包含大小写字母和空格 ‘ ‘ 的字符串 s中最后一个单词的长度1
2
3
4return len(s.strip().split(" ")[-1])
print("".split(" ")) # ['']
print(len("")) # 0
344
反转数组1
2
3
4s.reverse() # 内置方法,C实现,快
s[:] = s[::-1] #切片法,略慢于上述
头尾指针 逐一交换,python自生实现,最慢
345
反转字符串中的元音字母1
2
3
4
5
6
7
8
9
10
11
12
13def reverseVowels(self, s: str) -> str:
S = list(s)
vowel = ["a","e","i","o","u","A","E","I","U","O"]
vowel = set(vowel)
p1 ,p2 = 0, len(s) - 1
while p1 < p2:
while S[p1] not in vowel and p1 < p2: p1 += 1
while S[p2] not in vowel and p1 < p2: p2 -= 1
if p1 < p2:
S[p1], S[p2] = S[p2], S[p1]
p1 += 1
p2 -= 1
return "".join(S)
49
给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。1
2
3
4
5
6
7
8
9
10
11class Solution:
def groupAnagrams(self, strs: List[str]) -> List[List[str]]:
dict_type_word = {}
for word in strs:
dict_type_word.setdefault(str(sorted(word)), []).append(word) # 精华所在
list_result = []
for it in dict_type_word.values():
list_result.append(it)
return list_result
179
给定一组非负整数,重新排列它们的顺序使之组成一个最大的整数。1
2输入: [3,30,34,5,9]
输出: 9534330
1 | class Solution: |
利用cmp_to_key的返回值辅助sort()方法自定义排序规则
6
按照反N型排列字符串,并按行输出形成新的字符串
比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:1
2
3L C I R
E T O E S I I G
E D H N
1 | class Solution: |
res类似节省空间的二维数组,s逐一将字母放置在指定行中。
316
给你一个仅包含小写字母的字符串,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证返回结果的字典序最小(要求不能打乱其他字符的相对位置)。1
2
3
4
5
6
7
8
9
10
11class Solution:
def removeDuplicateLetters(self, s: str) -> str:
stack = ['0']
for i, it in enumerate(s):
if it not in stack:
while it < stack[-1] and stack[-1] in s[i+1:]:
stack.pop()
stack.append(it)
return "".join(stack[1:])
贪心+栈
65
验证给定的字符串是否可以解释为十进制数字。1
2
3
4
5-53.5e-93
+1.2e+3
空格 符号 数字 点 数字 E 符号 数字 空格
九种状态
正则表达式解法:1
2
3
4
5import re
class Solution:
def isNumber(self, s: str) -> bool:
pat = re.compile(r'^[\+\-]?(\d+\.\d+|\.\d+|\d+\.|\d+)(e[\+\-]?\d+)?$')
return True if len(re.findall(pat, s.strip())) else False
自动机解法:
画出状态转换图
确定合法的终止状态1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34class Solution:
def isNumber(self, s: str) -> bool:
states = [
{'blank': 0, 'sign': 1, 'digit': 2, 'dot': 3},
{'digit': 2, 'dot': 3},
{'digit': 2, 'dot': 4, 'e': 5, 'blank': 8},
{'digit': 4},
{'digit': 4, 'e': 5, 'blank': 8},
{'sign': 6, 'digit': 7},
{'digit': 7},
{'digit': 7, 'blank': 8},
{'blank': 8}
]
current_state = 0
for it in s:
if it in " ":
it = "blank"
elif it in "-+":
it = "sign"
elif it.isdigit():
it = "digit"
elif it == '.':
it = "dot"
if it not in states[current_state]:
return False
current_state = states[current_state][it]
if current_state not in [2, 4, 7, 8]:
return False
return True