Leetcode 344 翻转字符串
注意什么时候可以使用库函数。
class Solution {
public:
void reverseString(vector<char>& s) {
int n = s.size() - 1;
for(int i = 0; i < s.size() / 2; i++){
char tmp = s[i];
s[i] = s[n];
s[n] = tmp;
n--;
}
}
};
Leetcode 541 翻转字符Ⅱ
我自己的解法
class Solution {
public:
string reverseStr(string s, int k) {
int i = 0;
int j = 0;
while (j < s.length()) {
if ((j + 1) % (2 * k) == 0) {
int t = i + k - 1;
int mid = (i + t) / 2;
while (i <= mid) {
swap(s[i], s[t]);
i++;
t--;
}
i = j + 1;
}
j++;
}
if (s.length() - i < k) {
j = s.length() - 1;
int mid = (i + j) / 2;
while (i <= mid) {
swap(s[i], s[j]);
i++;
j--;
}
} else if (s.length() - i >= k && s.length() - i < 2 * k) {
int t = i + k - 1;
int mid = (i + t) / 2;
while (i <= mid) {
swap(s[i], s[t]);
i++;
t--;
}
}
return s;
}
};
官解
class Solution {
public:
string reverseStr(string s, int k) {
for(int i = 0; i < s.length(); i += 2 * k){
if(i + k <= s.length()){
reverse(s.begin() + i, s.begin() + i + k);
}
else{
reverse(s.begin() + i, s.end());
}
}
return s;
}
};
Kama 54 替换数字
主要还是输入输出的问题。
#include <iostream>
using namespace std;
int main(){
string s;
cin >> s;
int cnt = 0;
for(int i = 0; i < s.size(); i++){
if(s[i] >= '0' && s[i] <= '9'){
cnt++;
}
}
int oldPtr = s.size() - 1;
s.resize(s.size() + cnt * 5);
int newPtr = s.size() - 1;
while(oldPtr >= 0){
if(s[oldPtr] >= '0' && s[oldPtr] <= '9'){
s[newPtr--] = 'r';
s[newPtr--] = 'e';
s[newPtr--] = 'b';
s[newPtr--] = 'm';
s[newPtr--] = 'u';
s[newPtr--] = 'n';
}else{
s[newPtr--] = s[oldPtr];
}
oldPtr--;
}
cout<<s<<endl;
}