class Solution {
public:
void reverseString(vector<char>& s) {
int left = 0;
int right = s.size() - 1;
int tmp = 0;
while(left < right){
tmp = s[left];
s[left] = s[right];
s[right] = tmp;
left++;
right--;
}
}
};
比较简单,也可以直接用swap库函数;
class Solution {
public:
string reverseStr(string s, int k) {
for(int i = 0;i<s.size();i+=(k*2)){
if(i + k <=s.size()){
reverse(s.begin()+i,s.begin()+i+k);
}else {
reverse(s.begin()+i,s.end());
}
}
return s;
}
};
注意if的条件判断;
lass Solution {
public:
string replaceSpace(string s) {
int count = 0;
int oldsize = s.size();
for(int i = 0;i<oldsize;i++){
if(s[i]==' '){
count++;
}
}
s.resize(s.size()+count*2);
int newsize = s.size();
for(int i = oldsize-1;i>=0;i--){
if(s[i] == ' '){
s[newsize - 1] = '0';
s[newsize - 2] = '2';
s[newsize - 3] = '%';
newsize -= 3;
}else{
s[newsize - 1] = s[i];
newsize -= 1;
}
}
return s;
}
};
考虑到存在反转操作,采用栈
class Solution {
public:
string reverseWords(string s) {//反转字符串中的单词-C++
string result;
stack<string> stk;
int l = 0;
int r = 0;
while(r<s.size()){
while(r<s.size()&&s[r]==' '){
r++;
}
if(r == s.size()){
break;
}
l = r;
while(r<s.size()&&s[r]!=' '){
r++;
}
stk.emplace(s.substr(l,r-l));
stk.emplace(" ");
r++;
}
stk.pop();
while(!stk.empty()){
result += stk.top();
stk.pop();
}
return result;
}
};
创建栈:stack<string> stk;
栈操作:stk.emplace(s.substr(l,r-l));stk.pop();stk.empty();stk.top();
class Solution {
public:
void reverse(string& s,int begin,int end){
for(int i = begin,j = end;i<j;i++,j--){
swap(s[i],s[j]);
}
}
void remove(string& s){
for(int i = s.size()-1;i>0;i--){
if(s[i]==s[i-1]&&s[i]==' '){
s.erase(s.begin()+i);
}
}
if(s.size()>0&&s[0]==' '){
s.erase(s.begin());
}
if(s.size()>0&&s[s.size()-1]==' '){
s.erase(s.begin()+s.size()-1);
}
}
string reverseWords(string s) {//反转字符串中的单词-C++
remove(s);
reverse(s,0,s.size()-1);
int i = 0;
int j = 0;//代表单词开始
for(i=0;i<=s.size();i++){
if(i==s.size()||s[i]==' '){
reverse(s,j,i-1);
j = i + 1;
}
}
return s;
}
};
先去空格,再反转全部,最后反转单词;
class Solution {
public:
string reverseLeftWords(string s, int n) {
reverse(s.begin(), s.begin() + n);
reverse(s.begin() + n, s.end());
reverse(s.begin(), s.end());
return s;
}
};