一、反转字符串
1:类似反转链表,双指针
2:k值反转:每隔 2k 个字符的前 k 个字符进行反转,双指针
二、替换数字
正则匹配,但要运用substring将需要的部分分出来
或是指针。对于线性数据结构,填充或者删除,后序处理会高效的多。
三、反转字符单词
需要删除多余空格,,然后反转
四、右旋字符串
整体反转,前部分反转,后部分反转
注意字符串和数组的区别,字符串无法修改其中的字符,但数组可以
思想一:双指针
思想二:KMP(主要用在字符串匹配上),
next中的值代表着该子串的最长相等前后缀的长度,
因为数组是从0开始的,所以该值就指向了未匹配好的位置,
计算next数组时,若s[i]!==s[j],这说明不匹配,这个时候,j就要找到上一次匹配的位置,再判断匹不匹配,不匹配的话,再往前找,直到匹配或是j=0,
这个时候,j的位置代表了上一次匹配的位置,如果这个时候的s[i]===s[j],那么表示j还可以往后移,继续下次匹配,同时next[i]填入j的位置,表示能够匹配的上的长度;如果s[i]!==s[j],就表示,j这个时候已经在起点位置了,next[i]的值得为起点位置即0,然后继续下次循环。
两个字符串的比较也同理。
六、重复的子字符串
字符匹配:两个s拼接为一个ss(形成环),掐头去尾,若能找到ss中存在s,就说明s可有其子串重复构成