这学期上完数据结构来趁热打铁一下哈哈哈
(刚考完期末之前的过后补上!
344.反转字符串
力扣
我的想法: O(1) extra memory 就是不需要建一个新vector。所以我的想法就是for loop 一下这个vector,注意是从i=0到i < s.size()/2。然后第i位和第size - i - 1(注意这个-1,可以拿几个例子稍微确认一下)交换。这里需要拿一个char temp存一下需要交换的内容,不然会覆盖掉。
代码随想录:用了i和j两个下标分别从头和尾标注并交换,本质原理应该是一样的,但是更直观和方便。另外swap的部分还可以用swap函数,以及位运算(这个知识还没接触过,以后可以留意一下)。
学习一下更直观的reverse写法(主要是i和j的使用):
for(int i = start, j = end; i < j; i++, j--){
swap(str[i], str[j]);
}
注意input应该是string& s, pass by reference!这样才能有效的改变s。
void reverse(string& s, int start, int end)
541. 反转字符串II
力扣
我的想法: 我写了一个和上一题类似的helper function,只不过是直接reverse string输出string。然后在reverse function里按照题目要求各种操作。需要注意 c++中 substr是(index, length),我开始想成(index, end index)了于是卡了半天奇怪的错误哈哈哈。
通过了但是时间空间复杂度不行
代码随想录:
1. “在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间”。
2. 在写helper function的时候把start,end作为参数带进去,只需要修改for loop的起始和结束点即可。能大大减轻主方法的工作量。( 事实证明很好用!
3. Reverse string如果没有特殊要求,不用写一个vector。string本身就可以用str.at(i)替换。
4. >= 2k和 k < i < 2k 都是只reverse前k个即可,所以可以合并起来写
5. 注意continue的用法:强行让for loop执行下一次(i += 2k)。所以每次reverse完一部分要记得continue,才会去reverse下一个k。
(一些其他:下一个题写了15分钟还没写完大概就是方法太复杂了。可以直接看一下代码随想录hhh)
力扣
我的想法:新建一个string。对于原string,如果遇到空格就往新string里加“%20“,如果不是就加那一位本身。时间复杂度O(n), 但是空间复杂度需要建一个新string
代码随想录:扩充数组 + 从后向前填充。这时空间复杂度不用建一个新string,只需要resize。
注意扩充的长度是:原size + 空格数*2,因为”%20“ 比 “ “ 【多了】两个字母
一个小问题:注意用if的时候是:if(s[i] == ' '),是双等于
151.翻转字符串里的单词
力扣
我的思路:先把左右两边的空格trim掉。然后对于trim好的string,每识别到一个完整的单词就放到vector里,最后vector倒序输出。这样不用考虑中间空格多或者少的问题。但是空间复杂度比较高,不能满足在原string上变化的要求。
(虽然但是独立做出来了个medium也算个进步了bro(对我来说
代码随想录:
1. 全部反转 + 每个单词再次反转
2. removeExtraSpace用到了移除元素那道题的思想。我到时候补day 1的时候重点关注一下。今天先看其他两个function。
3. reverseWord时,注意for loop的结束点是:i <= s.size()。这样i == s.size()可以判断到了句尾,而后面reverse的时候用的是i-1,也不会出界。
4. 还需要注意reverse function 的 string&s 应该是pass by reference (同344)
力扣
我的思路:这题如果不限制空间复杂度还是比较简单的,直接substr相加即可。不过要是不说可以用reverse还真的想不到可以用哈哈哈。
代码随想录:
- 反转区间为前n的子串
- 反转区间为n到末尾的子串
- 反转整个字符串
之后就非常清晰了,直接利用之前的reverse方法即可。这样空间复杂度为O(1)
注意:反转整体 + 反转局部不一定有什么顺序,就看题目要求不同需要灵活运用。
整体总结:
这几道题虽然有些方法用的比较暴力,但居然都做出来了哈哈哈,相比于大一还是有了很大进步!(data structure没白上)。接下来的目标就是优化算法 优化空间时间复杂度。加油!