344. 反转字符串
题目链接
题解:双指针,用swap。
class Solution {
public:
void reverseString(vector<char>& s) {
for(int i=0,j=s.size()-1;i<j;i++,j--){
swap(s[i],s[j]);
}
}
};
541. 反转字符串II
题目链接
题解:双指针,用swap,也可以直接reverse。
class Solution {
public:
string reverseStr(string s, int k) {
int j,n;
for (int i = 0; i < s.size() ; i = i + 2 * k) {
if (s.size()-i>=k) {
j = i;
n = i + k-1;
for (; j <n; j++, n--) {
swap(s[j], s[n]);
}
}
else{
j=i;
n=s.size()-1;
for(;j<n;j++,n--){
swap(s[j],s[n]);
}
}
}
return s;
}
};
54.替换数字
题目链接
题解:还是要多练习输入输出的acm模式,这次换了一个oj通过率很感人,都是一些奇怪的语法错误。
#include <iostream>
#include <string>
using namespace std;
int main(){
string s;
string r;
cin>>s;
for (char m:s){
if(m<='9'&&m>='0'){
r+="number";
}else{
r+=m;
}
}
cout<<r<<endl;
}
151. 反转字符串中的单词
题目链接
题解:解题思路如下:移除多余空格,将整个字符串反转,将每个单词反转。分为三个函数求解,其中移除多余空格函数需要多理解。
class Solution {
public:
string reverseWords(string s) {
deleteSpace(s);
reverse(s, 0, s.size() - 1);
int start = 0;
for (int i = 0; i <= s.size(); ++i) {
if (s[i] == ' ' || i == s.size()) {
reverse(s, start, i - 1);
start = i + 1;
}
}
return s;
}
void deleteSpace(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);
}
void reverse(string& s, int start, int end) {
for (int i = start, j = end; i < j; i++, j--) {
swap(s[i], s[j]);
}
}
};