1、反转字符串:代码随想录 (programmercarl.com)
1.双指针法的一个小应用,for循环的一个终止条件可以是i<size/2也可以是i<j。
2.反转字符串II:代码随想录 (programmercarl.com)
1.本题要搞懂意思:是2k,2k的记数,直到最后剩下的字符串长度不足2k。
2.reverse库函数反转的时候是左闭右开
3.注意if的判断边界条件是<=,当拿不准的时候就举例子。
3.剑指Offer 05.替换空格:代码随想录 (programmercarl.com)
1.其实很多数组填充类的问题,都可以先预先给数组扩容带填充后的大小,然后在从后向前进行操作。这么做有两个好处:
- 不用申请新数组。
- 从后向前填充元素,避免了从前先后填充元素要来的 每次添加元素都要将添加元素之后的所有元素向后移动。
2.for循环的条件为何为j<i?因为相当于i一直在从后往前追j,每遇到一个空格j和i之间的距离就缩短两格,直到二者相遇,就结束循环。
3、i= newsize-1而非newsize,j同理
4.一定要记得最后i-=2,要不然就是错误。
4.151.翻转字符串里的单词:代码随想录 (programmercarl.com)
1.若想要删除连续出现相同字符串的情况(或有这种可能)则用while循环2
2.学会用双指针法去除中间的空格。
3.注意索引和size()的区别,索引从0开始,size从1开始
在以上代码中,因为在填充完最后一个数组内容后,slow++,使得最后有内容的索引为slow-1,而size则是比最后一个索引大一个,为slow。
4.要记住最后反转单词的操作,即用for循环和if在循环中筛选
5.最后反转时,for中的条件为i<=而非<s.size()、||中的条件为i==s.size()而非size-1.因为reverse函数是左闭又开的,不包括最最右边的那一个元素,即反转的下标为i的前一个。
6.在removespace函数中,因为第二步处理之后就不会有两个空格连在一起的情况,所以最后一步(移除字符串尾部的空格)只需要考虑只有一个空格的情况。
7.最后的判断条件为||而不是&&,不要写错了。
刷题遇到的错误:6.7
本题总结:主要是要掌握删除多余空格函数的写法。
5.剑指Offer58-II.左旋转字符串:代码随想录 (programmercarl.com)
注意:
1.reverse(start,end)函数中翻转的元素包括start但是不包括end。左闭右开。
2.stl容器中。begin()是指向第一个元素的迭代器,而.end()返回的是最后一个元素再后面一位的迭代器。