Skip to content

Latest commit

 

History

History
39 lines (21 loc) · 1.4 KB

6. 字符串.md

File metadata and controls

39 lines (21 loc) · 1.4 KB
[344] 反转字符串

给定vector s,反转该字符串

  • 注意字符数组,字符串和vector 之间的区别:只有C风格字符串的最后是有\n的即 char s[k]
[541] 反转字符串 II
[151] 翻转字符串里的单词

KMP算法

next数组的三种形式:只涉及具体实现不涉及具体原理

j = next[j-1];//普通形式
j = next[j-1]+1; //将next数组减1
j = next[j]; // 将next数组右移

getNext

在计算next数组时,当s[i]与s[j]不相等时,回退j而不是直接令j=0的必要性:

例如needle字符串为aabaaac 当i指向最后一个a时,此时j指向b,s[i]!=s[j],此时令j = next[j-1]即为1,s[i]=s[j],j++, next[i]=2。

即当c不匹配时,j跳向b继续匹配而不是跳向0

可以发现,在这个过程中,实际上有两个匹配过程:串内匹配和串间匹配。串内匹配指的就是在计算next数组时,i与j的匹配。而串间匹配则是我们应用KMP算法在haystack中寻找needle字符串的过程。在这两个过程中,都用到了回退j的思想。

[28] 实现strStr()

给定两个字符串haystack和needle,找出needle在haystack中第一次出现的位置,并返回首字母index。若找不到,返回-1;对于空needle,返回0。

[459] 重复的子字符串

给定字符串s,判断s能否由其某个字串重复多次构成,返回true or false