RTTO WEEK3
WEEK 3
344.反转字符串(e)
前一半后一半做个swap,没啥好说的。
541.反转字符串Ⅱ(e)
每次遍历2k的距离,如果有k个字符(size能容纳当前遍历的k个字符),则reverse前k个,否则,反转全部字符。
剑指Offer 05.替换空格(e)
简单遍历改字符需要进行字符串空间上的扩容;
1.首先遍历一遍原字符串计算出所含空格的个数;
2.resize原字符串,+2*count;
3.使用双指针法,j指向原字符串最后一位,i指向扩充后字符串最后一位,同时向前遍历新字符串;若碰到非空位置,则更新非空字符在新字符串中的位置;若碰到空位置,此时的i即对应新字符串中0的位置,前一位为2,前前位为%;
151.反转字符串中的单词(m)
两个关键操作:字符串逆置reverse;去除多余空格,保证两个单词之间仅存在一个空格;
1.将原字符串去除多余空格;
2.将去重后的原字符串整个逆置;
3.遍历逆置后的字符串,碰到空格则将空格前的字符逆置;
剑指Offer 58 - Ⅱ.左旋转字符串(e)
默认不开辟额外空间;
reverse前n个;
reverse剩下的;
reverse全部的;
28.找出字符串中第一个匹配项的下标(m)
KMP算法
459.重复的子字符串(e)
解法一:移动匹配
任何一个重复子字符串构成的字符串,其前半部分和后半部分都是相等的;
那么s+s中就一定存在一个新s;
掐头去尾(erase去首尾字母),这样才能找到拼接而成的新s,而不是原本头尾的老s;
若存在新s,则返回true,否则false;
解法二:KMP法
核心:最长相等前后缀不包含的子串就是最小重复子串