0%

541.反转字符串 II

541. 反转字符串 II

reverse is 左闭右开 每隔k个就反转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
string reverseStr(string s,int k){
for(int i =0;i<s.size();i+=(2*k)){
//每隔2k个字符的前k个字符进行反转
//剩余字符小于2k 但大于或等于k个,则反转前k个字符
// abcdefg
// bacdfeg
//0+2<7
// reverse 0,2 ba
// i=4
// 4+2<=7
// reverse 4,6 ef
if(i+k<=s.size()){
reverse(s.begin()+i,s.begin()+i+k);
}
else{
//剩余字符串少于k个,则将剩余字符全部反转
reverse(s.begin()+i,s.end());
}
}
return s;
}

自己写一个左闭右闭的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void reverse(string& s,int start,int end){
for(int i=start,j=end;i<j;i++,j--){
swap(s[i],s[j]);
}
string reverseStr(string s,int k ){
for(int i =0;i<s.size();i+=(2*k)){
if(i+k<=s.size()){
reverse(s,i,i+k-1);
continue;
}
reverse(s,i,s.size()-1;)
}
return s;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
class Solution {
public:
void reverse(string& s,int start,int end){
for(int i=start,j=end;i<j;i++,j--){
swap(s[i],s[j]);
}
}
string reverseStr(string s, int k) {
for(int i =0;i<s.size();i+=(2*k)){
if(i+k<=s.size()){
reverse(s,i,i+k-1);
}
else{
reverse(s,i,s.size()-1);
}
}
return s;
}
};
-------------本文结束感谢您的阅读-------------
老板你好,讨口饭吃