344. 反转字符串
-
方法:
方法一: 直接用reverse函数 -
注意:
-
代码:
class Solution {
public:
void reverseString(vector<char>& s) {
return reverse(s.begin(), s.end());
}
};
-
运行结果:
-
方法:
方法二: 双指针 思路:1.定义两个指针,left=0 ,right = s.size()-1; 2.交换两个指针对应的字符; 3.左指针++,右指针--, 直到左指针< 右指针终止循环。
-
注意:
-
代码:
class Solution {
public:
void reverseString(vector<char>& s) {
int left=0;
int right = s.size()-1;
while(left<right){
swap(s[left], s[right]);
left++;
right--;
}
}
};
- 运行结果
541. 反转字符串II
-
方法:
利用for循环,按题意来。
-
注意:
-
代码:
class Solution {
public:
string reverseStr(string s, int k) {
int size = s.size();
for(int i=0; i<s.size(); i+=(2*k)){
if(i+k<size){
reverse(s.begin()+i, s.begin()+i+k);
}else {
reverse(s.begin()+i, s.end());
}
}
return s;
}
};
- 运行结果
卡码网:54.替换数字
-
方法:
方法一:1. 开辟一个新的字符串res ; 2. 遍历字符串s, 若遇到数字,则res+="number",若遇到字符,则res+=i;
-
注意:
-
代码:
#include <iostream>
#include <string>
using namespace std;
int main(){
std::string s;
cin>>s;
std:: string res;
for(char i: s){
if(i>='0' && i<='9'){
res += "number";
}else{
res+=i;
}
}
cout<< res;
}
-
运行结果
-
方法:
方法二: 双指针 ,不用重新开辟新字符串,输出原始的字符串s:指针i 指向新长度的末尾 指针j 指向旧长度的末尾 如果s[j]是数字,则 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; 如果s[i]是字母 则s[i] = s[j]
-
注意: 利用cout输出
-
代码:
#include<iostream>
using namespace std;
int main(){
string s;
while(cin>>s){
int count = 0;
int oldsize = s.size();
for(int i = 0; i < s.size(); i++){
if(s[i]>='0'&& s[i]<='9'){
count++;
}
}
// cout<<count<<endl;
s.resize(s.size()+ count* 5);
int newsize = s.size();
for(int i=newsize-1, j = oldsize-1; i>j ; j--, i--){
if(s[j]>='0'&& s[j]<='9'){
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;
}else{
s[i] = s[j];
}
}
std::cout << s << std::endl;
}
}
- 运行结果
151.翻转字符串里的单词
-
方法:
方法一: 分段式想法:1. 先去掉s中多余的空格(前面的空格、中间的空格、后面的空格) 2. 写一个翻转函数, 翻转局部小单词 3. 整个字符串翻转,输出字符串。
-
注意:
-
代码:
class Solution {
public:
void remove_extra_space(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[0] == ' '&& s.size()>0){
s.erase(s.begin());
}
if(s[s.size()-1]== ' ' && s.size()>0){
s.erase(s.begin()+s.size()-1);
}
}
void reverse(string &s, int start, int end){
for(int i=start, j=end; i<j; i++, j--){
swap(s[i], s[j]);
}
}
string reverseWords(string s) {
remove_extra_space(s);
cout<<s<<endl;
reverse(s, 0, s.size()-1);
cout<<s<<endl;
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;
}
};
- 运行结果
卡码网:55.右旋转字符串
-
方法:
方法一: 暴力法 思路: -
注意:
-
代码:
-
运行结果