目录
一些感想
又是新的一天,刚把昨天的博客完结(其实还是拖着一个没理解的方法勉强地完结了),今天天色已晚,事情又很多,不过我也不会就此不做一道题的,我做道简单题好了
剑指 Offer 58 - I. 翻转单词顺序
题目描述
输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student. “,则输出"student. a am I”。
前言
好眼熟,感觉好像在牛客刷过的寥寥几道题里面做过。
做出来了,看了下解答区,发现如果不用C++的话,Python里面有split、reverse、join函数,非常方便。
解答区的C++解答也是很有意思的,思路和我的完全不一样。
看过了这个思路的方法,我又向下看了一个方法,和我的思路总体上基本是一样的!太好了
知识点
向string类型字符串里添加单个字符的方法
push_back()方法
string s1="123";
s1.push_back('a'); //此时s1字符串="123a"
思路
解答区的思路看起来比我的巧妙很多,不过我的解答的时间复杂度我不再算了,就直接总结一下解答区的思路吧。
1、反转整个字符串
2、开始循环,遇到空格则跳过去该位置(即不做任何操作)
3、设置变量start、end,分别记录当前单词开始的位置和结束的位置。
4、找到单词开始的位置,再找到该单词结束的位置,趁这个过程将这个单词挪到 上个单词+一个空格 的后面(即跳过去不管中间几个空格)
5、使用reverse翻转整个单词
6、更新start,寻找下一个单词,直到末尾循环结束
7、使用s.erase()方法,擦除尾部空格,s就是要得到的字符串
剑指 Offer 58 - II. 左旋转字符串
题目描述
字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如,输入字符串"abcdefg"和数字2,该函数将返回左旋转两位得到的结果"cdefgab"。
知识点
- 字符串切片函数
string s1="123456";
string s0 = s1.substr(1, 3);
cout<<s0<<endl; //输出“234”
思路
1、字符串切片,再拼接
2、新建一个字符串,先添加后部分,再添加前部分
3、不使用额外的数组,直接在原字符串上操作的方法
使用 整体反转+局部反转 就可以实现 反转单词顺序 的目的。这道题也是一样的思路。
具体步骤如下:
(1)反转前 n 个字符
(2)反转 n 到末尾的字符
(3) 反转整个字符串
再见
今天又要结束了,再见啦,暂时没什么要多说的,很累也很充实,明天又是新一天!