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算法

代码随想录 (programmercarl.com)

459.重复的子字符串(e)

解法一:移动匹配

任何一个重复子字符串构成的字符串,其前半部分和后半部分都是相等的;

那么s+s中就一定存在一个新s;

掐头去尾(erase去首尾字母),这样才能找到拼接而成的新s,而不是原本头尾的老s;

若存在新s,则返回true,否则false;

解法二:KMP法

核心:最长相等前后缀不包含的子串就是最小重复子串