4.1字符串翻转
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0,j=s.size()-1;i<s.size()/2;i++,j--){
swap(s[i],s[j]);
}
}
};
4.2翻转字符串Ⅱ
class Solution {
public:
string pathEncryption(string path) {
int count=0;
int oldsize=path.size();//原来字符串的长度
for(int i=0;i<path.size();i++){
if(path[i]==' ')
count++;
}
path.resize(path.size()+count*2);//扩展新的字符串的长度
int newsize=path.size();
for(int i=newsize,j=oldsize;i<j;i--,j--){
if(path[j]!=' ')//如果遍历值不是空格,则正常替换
path[i] = path[j];
else{
path[j]='0';//当前的j位置被替换成0
path[j-1]='2';
path[j-2]='%'
i-=2;//将i往前进2个单位
}
}
return path;
}
};
4.3替换空格
class Solution {
public:
string pathEncryption(string path) {
int count=0;
int oldsize=path.size();//原来字符串的长度
for(int i=0;i<path.size();i++){
if(path[i]==' ')
count++;
}
path.resize(path.size()+count*2);//扩展新的字符串的长度
int newsize=path.size();
for(int i=newsize,j=oldsize;i<j;i--,j--){
if(path[j]!=' ')//如果遍历值不是空格,则正常替换
path[i] = path[j];
else{
path[j]='0';//当前的j位置被替换成0
path[j-1]='2';
path[j-2]='%'
i-=2;//将i往前进2个单位
}
}
return path;
}
};
4.4翻转字符串里的单词
class Solution {
public:
void reverse(string& s,int start,int end){//翻转整个字符串
for(int i=start,j=end;i<j;i++,j--)
swap(s[i],s[j]);
}
void removekong(string& s){//删除多余的空格
int slow = 0;
for(int i=0;i<s.size();++i){
if(s[i]!=' '){//值为空格时处理
if(slow!=0) s[slow++]=' ';//如果此时slow指向元素不是首位元素
while(i<s.size()&&s[i]!=' ')
s[slow++]=s[i++];//如果值不为空格则把完整的单词提前
}
}
s.resize(slow);//更新字符串的长度
}
string reverseWords(string s) {
removekong(s);
reverse(s,0,s.size()-1);
int start=0;
for(int i=0;i<=s.size();i++){
if(s[i]==' '||i==s.size()){//i是最后一个元素或者s[i]是空格时
reverse(s,start,i-1);//翻转整个单词
start=i+1;
}
}
return s;
}
};