反转字符串
双指针法,从两边向中间移动,两两交换即可。
反转字符串II
题目描述看似复杂,其实就是在每个2nk处(n取自然数)进行判断,后面有k个就翻k个,不够k个就全翻转。
注意下reverse用法:
reverse(s.begin() + i, s.begin() + i + k );
替换空格
从前向后填充是O(n^2)的算法了,因为每次添加元素都要将添加元素之后的所有元素向后移动。
其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后再从后向前进行操作。
这么做有两个好处:
不用申请新数组。
从后向前填充元素,避免了从前向后填充元素时,每次添加元素都要将添加元素之后的所有元素向后移动的问题。
注意一下resize:
s.resize(s.size() + count * 2);
翻转字符串里的单词
快慢指针删除零
reverse两次翻转即可
左旋转字符串
使用substr,空间复杂度是O(n),反转的空间复杂度是O(1)。