【代码随想录算法训练营——Day9】字符串——151.翻转字符串里的单词、卡码网:55.右旋转字符串、28.实现 strStr()、459.重复的子字符串
LeetCode题目链接
https://leetcode.cn/problems/reverse-words-in-a-string/description/
https://kamacoder.com/problempage.php?pid=1065
https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/
https://leetcode.cn/problems/repeated-substring-pattern/
题解
151.翻转字符串里的单词
首先记得思路是先删除空格,再结合erase和substr这两个API就能写得出了。
卡码网:55.右旋转字符串
熟练掌握string的API就可以。
28.实现 strStr()
留了个大坑以后补——一。
459.重复的子字符串
留了个大坑以后补——二。
代码
//151.翻转字符串里的单词
#include <iostream>
#include <string>
using namespace std;class Solution {
public:void deleteSpace(string& s) {while(1){if (s[0] != ' ') break;else s.erase(0, 1);}for (int i = 0;i < s.size();i++) {while ((i + 1) < s.size() && s[i] == ' ' && s[i + 1] == ' ') {s.erase(i + 1, 1);}}for (int i = s.size() - 1;i >= 0;i--) {if (s[i] == ' ') s.erase(i, 1);else break;}}string reverseWords(string s) {deleteSpace(s);string result;int i = s.size() - 1;while(i >= 0) {int right = i, left = i;while (left > 0 && s[left - 1] != ' ') left--;string tmp = s.substr(left, right - left + 1);result += tmp;if (left > 0) result += ' ';i = left - 2;}return result;}
};int main() {string str = "a good example";Solution s;cout << s.reverseWords(str) << endl;return 0;
}
//卡码网:55.右旋转字符串
#include <iostream>
#include <string>
using namespace std;void reverseStr(string& s, int k) {string tmp = s.substr(s.size() - k, k);s.insert(0, tmp);s.erase(s.size() - k, k);
}int main() {int k;string s;cin >> k >> s;reverseStr(s, k);cout << s << endl;return 0;
}