344. 反转字符串
541. 反转字符串 II
557. 反转字符串中的单词 III
151. 翻转字符串里的单词
剑指 Offer 58 - II. 左旋转字符串
今天重新开始刷题了,刷了一堆字符串的题目,另外可能再写一点随笔

时隔大半年,我终于又开始敲起键盘,提笔写我的博客了。时隔大半年,我也再一次进入了找工作的节奏。希望这一次能多写一些。。。

首先就是刷题吧,虽然这学期也陆陆续续做过一些题,但是可能一共也没记住多少题的具体做法,所以我打算从现在开始认认真真的刷题了,正好博客是一个每日记录的好场所,就大概把每天做过的题写下来记录一下,也算是对于自己的一个激励吧。

现在刷题还是用的代码随想录上的总结题目,感觉每道题写的也还算详细,答案也比较容易看,其实主要还是要按照不同块来做,这样效率可能会高一点,不过其实之前做过的题估计也忘得差不多了。。。之后还是得好好复习才行

现在是从字符串开始做起的,字符串也算是我很早很早以前就开始做的题了,甚至可能是我最开始做的一部分题,首先是从344. 反转字符串开始,后面的题基本上每一道都用了这个的模板:

1
2
3
4
5
void reverse(string& s, int l, int r) {
for (; l < r; l++, r--) {
swap(s[l], s[r]);
}
}

虽然c++应该有内置库函数,但是其实写这么一个函数也并不算难,于是后面的所有题基本上都是基于这个模板来写的。

541. 反转字符串 II就是模拟,然后不断反转选中的k个字符。

557. 反转字符串中的单词 III用双指针选择单词,然后反转单词。

151. 翻转字符串里的单词剑指 Offer 58 - II. 左旋转字符串比较有趣,一开始我根本想不出来一个原地旋转的算法,后来发现这两道题只要想到将原字符串直接反转,然后按照题目要求进行处理就可以了。最主要的思路还是先将原字符串进行反转

151是先反转,然后将反过来的每个单词进行反转,最后去除空格,这一部分比较复杂,主要是既要去除多余的空格,又要保留单词间的空格。首先去除空格只需要用双指针,跳过所有的空格就可以了,保留单词间的空格,首先要在上一步的基础上保留每个单词后面的第一个空格,然后再对最终输出的字符串进行检查,去除最后的空格。

58是先将所有字符串反转,然后将字符串分成前后两部分进行处理,后面n个和前面的,分别反转就可以了。

总的来说今天这几道题还是比较简单,后面的题可能越来越难了,还是要加油才行。

现在的目标大概就是每天按照这个列表刷4道题吧,然后复习前一天刷过的题,另外我也在考虑改用JS刷题,但是目前JS的基础还不算太好,还是先学习一下比较好。这样吧,每天在刷完4道题后改用JS写其中的两道简单一点的题试试,正好也可以熟悉一下JS的核心语法。

今年一整年刷的题感觉都不如去年最后三个月刷的多,虽然断断续续做题数上了300,但是也不知道到底有多少记住的题,所以从现在开始,为了留在这里努力吧。

评论