算法日志5:字符串也是数组
前言
字符串相关题目记录
反转字符串1
class Solution {
public:
void reverseString(vector<char>& s) {
int l,r;
l = 0;
r = s.size()-1;
while(r>l){
s[l] ^= s[r];
s[r]^=s[l];
s[l]^=s[r];
l++;
r--;
}
}
};
反转字符串2
class Solution {
public:
void myreverse(string&s, int l, int r){
while(r>l){
swap(s[l], s[r]);
r--;
l++;
}
}
string reverseStr(string s, int k) {
int l,r;
int len = s.size();
for(int i =0 ;i<len;i+=2*k){
if(i+k-1<len){
l = i;
r = i+k-1;
myreverse(s,l, r);
}
else{
l = i;
r = len-1;
myreverse(s,l,r);
}
}
return s;
}
};
替换数字
#include<iostream>
#include<string>
using namespace std;
int main(){
string s = "";
cin>> s;
int cnt = 0;
int l = s.size() - 1;
for(int i = 0; i<s.size();i++){
if(s[i]-'0'>=0 &&s[i]-'0'<=9){
cnt++;
}
}
for(int i =0; i<cnt;i++){
s+=" ";
}
int r = s.size() - 1;
while(l>=0){
if(s[l]>='a' && s[r]<='z'){
s[r--] = s[l];
l--;
}
else{
s[r--] = 'r';
s[r--] = 'e';
s[r--] = 'b';
s[r--] = 'm';
s[r--] = 'u';
s[r--] = 'n';
l--;
}
}
cout<<s;
}
翻转字符串里的单词
class Solution {
public:
void myreverse(string&s, int l, int r){
while(r>l){
swap(s[l], s[r]);
l++;
r--;
}
}
string reverseWords(string s) {
// 去除多余空格
int fast = 0,slow = 0;
while(s[fast]==' '){
fast++;
}
while(fast<s.size()){
if(s[fast]!=' '){
s[slow] = s[fast];
slow++;
fast++;
}
else if(fast>0 && fast<s.size() -1&& s[fast] == ' '&& s[fast+1]!=' '){
s[slow] = s[fast];
slow++;
fast++;
}
else{
fast++;
}
}
s.resize(slow);
// cout<<s;
//提取完毕
myreverse(s, 0, s.size()-1);
int l = 0,r = 0;
while(r<s.size()){
if(r == s.size()-1) myreverse(s,l,r);
if(s[r]!=' ') r++;
else{
myreverse(s,l,r-1);
l = r+1;
r = r+1;
}
}
return s;
}
};
右旋字符串
#include<iostream>
#include<string>
using namespace std;
void myreverse(string &s, int l, int r){
while(r>l){
swap(s[l], s[r]);
l++;
r--;
}
}
int main(){
int k;
cin>>k;
string s;
cin>>s;
myreverse(s,0,s.size()-1);
int l =0, r = k-1;
myreverse(s, l, r);
myreverse(s, r+1, s.size() - 1);
cout<<s;
}

浙公网安备 33010602011771号