字符串part01
反转字符串
时间复杂度: O(n)
空间复杂度: O(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]);
}
}
};
反转字符串II
时间复杂度: O(n)
空间复杂度: O(1)或O(n), 取决于使用的语言中字符串是否可以修改.
class Solution {
public:
string reverseStr(string s, int k) {
for(int i=0;i<s.size();i+=2*k) {
// 间隔2k遍历字符串
// 剩余2k但大于等于k个,反转前k个字符串
if(i+k<=s.size()) {
reverse(s.begin()+i,s.begin()+i+k);
continue;
}
// 剩余字符少于k个,则将剩余字符全部反转
reverse(s.begin()+i,s.end());
}
return s;
}
};
替换数字
时间复杂度:O(n)
空间复杂度:O(1)
#include<iostream>
using namespace std;
int main()
{
string s;
while(cin >> s){
int cnt=0; // 统计数字个数
int sOldSize=s.size();
for(int i=0;i<s.size();i++){
if(s[i]>='0' && s[i]<='9'){
cnt++;
}
}
s.resize(s.size()+cnt*5);
int sNewSize=s.size();
for(int i=sNewSize-1,j=sOldSize-1;j<i && j>=0;i--,j--){
if(s[j]>'9' || s[j]<'0'){
s[i]=s[j];
} else {
s[i]='r';
s[i-1]='e';
s[i-2]='b';
s[i-3]='m';
s[i-4]='u';
s[i-5]='n';
i-=5;
}
}
cout<<s<<endl;
}
return 0;
}