LC吐血整理-String篇


所有题解方法请移步 github-Leecode_summary

28.实现strStr()

知识点:数组的切片 题外话:真是个呆子,我有毒,刚开始一直想着用双指针去做(Array后遗症)     (❓传说中的暴力匹配法) 大神吐槽:这个题本意是KMP!!不是用内置函数解决(原谅我KMP都不知道是什么)

简单版(菜鸡版):

1
2
3
4
5
6
7
# 几种字符匹配的方法
>>> string = "hello, this is string example....wow!!!"
>>> string.find/index("exam") # method 1
22
>>> import re # re模块中好像有很多关于字符匹配/替换的函数
>>> re.search("exam",string)
<_sre.SRE_Match object; span=(22, 26), match='exam'>

高手版

14.最长公共前缀

我太难了,官方题解方法好复杂,不想看了,还是评论区看得过眼~ zip():  将可迭代的对象作为参数,将对象中对应的元素打包成元组,返回由这些元组组成的列表 (python3返回对象)。  如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

1
2
3
4
5
6
7
8
9
10
11
12
>>> a = [1,2,3],b = [4,5,6,7,8]
>>> zipped = zip(a, b) list(zipped)
[(1, 4), (2, 5), (3, 6)] # py3需要list()转换 或者 *
>>> zip(*zipped) # 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
[(1, 2, 3), (4, 5, 6)]
>>> nums = ['flower','flow','flight']
>>> for i in zip(*num):
>>> print(i)
('f', 'f', 'f')
('l', 'l', 'l')
('o', 'o', 'i')
('w', 'w', 'g')

58. 最后一个单词的长度

得改: 遇到if很多的代码就总觉得这样的代码不好,不想写,总而言之:跑通的是爸爸 split():
  指定分隔符对字符串进行切片, para: num(分割为num+1个字符串)
strip([chars]):
  移除字符串头尾指定的字符序列 rstrip(): 删除末尾的指定字符 lstrip()开头

1
2
3
4
5
6
7
# split() 和 split(' ')的区别  
>>> strs = " a b c d "
>>> strs.split()
['a', 'b', 'c', 'd']
# split(): 多个空格当成一个空格;split(' '): 多个空格也要分割,分割为空。
>>> strs.split(' ')
['', 'a', 'b', 'c', '', 'd', '', ''] # 真的是乱七八糟的

387. 字符串中的第一个唯一字符 & 383. 赎金信

这个题目大家都有好多妙招呀! 今日份Tips-1: str.find() str.rfind() list 的查找方法:

1
2
3
4
5
6
7
8
9
10
11
>>> listA = [1,2,6,8,2,3,4,1]
>>> 8 in listA # 判断值是否在list中 in/not in
True
>>> listA.count(1) # 统计某个值在listA中出现次数
2
>>> listA.index(1, 3, 8) # 返回某个值在listA中第一次出现的索引 可指定搜索区间
7
# 特别的string可使用find
>>> strA = "amilyxy"
>>> strA.find('y') / strA.rfind('y')
4 / 6

344.翻转字符串 & 151.翻转字符串里的单词

今日份Tips-1: list和str转换 我惊了个呆,原来"".join(listA)" ".join(listA) 是不一样的,原来我一直没搞懂其本质。

1
2
3
4
5
6
7
8
>>> strA = "the sky is blue"
>>> listA = strA.split()
>>> "".join(listA)
'theskyisblue'
>>> " ".join(listA)
'the sky is blue'
>>> "##".join(listA)
'the##sky##is##blue'

@amilyxy
2019.8.31
2019.11.7 其实有明显感觉做题的时间和代码效率都进步了(应该是array和string都太简单