151.反转字符串中的单词
题目链接https://leetcode.cn/problems/reverse-words-in-a-string/
这里删除空格的操作快指针指向的是字符串中字母的位置,慢指针指向的是要更新的位置。所以是要快指针是要遍历整个数组,因此判断条件是快指针不等于空的时候。
void remove(string& s,int start,int end){
for(int i=start,j=end;i<j;i++,j--){//这里i<=j也没错,只是奇数中间交换了一下不影响结果
swap(s[i],s[j]);
}
}
void removeExtraspace(string& s){
int slow=0;
for(int i=0;i<s.size();i++){
if(s[i]!=' '){
if(slow!=0){
s[slow++]=' ';}
while(i<s.size()&&s[i]!=' '){
s[slow++]=s[i++];
}
}
}
s.resize(slow);//把s的大小调整为slow 不然s数组大小输出有赘余
}
class Solution {
public:
string reverseWords(string s) {
removeExtraspace(s);
remove(s,0,s.size()-1);
int start=0;
for(int i=0;i<=s.size();i++){
if(s[i]==' '||i==s.size()){
remove(s,start,i-1);//交换的时候是空格的前一位和start进行交换
start=i+1;//start要更新为空格的下一位
}
}
return s;
}
};
55.右旋字符串
题目链接https://kamacoder.com/problempage.php?pid=1065
#include<iostream>
#include<algorithm>
using namespace std;
int main() {
string s;
int n;
cin >> n;
cin >> s;
reverse(s.begin(), s.end());
reverse(s.begin(), s.begin()+n);//reverse是左闭右开的
reverse(s.begin()+n , s.end());
cout << s;
return 0;
}
这reverse用着是真的方便
LeetCode字符串反转算法题解析
246

被折叠的 条评论
为什么被折叠?



