力扣:541. 反轉(zhuǎn)字符串 II
541. 反轉(zhuǎn)字符串 II
難度簡單453
給定一個字符串?s
?和一個整數(shù)?k
,從字符串開頭算起,每計數(shù)至?2k
?個字符,就反轉(zhuǎn)這?2k
?字符中的前?k
?個字符。
如果剩余字符少于?
k
?個,則將剩余字符全部反轉(zhuǎn)。如果剩余字符小于?
2k
?但大于或等于?k
?個,則反轉(zhuǎn)前?k
?個字符,其余字符保持原樣。
?
示例 1:
輸入:s = "abcdefg", k = 2輸出:"bacdfeg"
示例 2:
輸入:s = "abcd", k = 2輸出:"bacd"
?
提示:
1 <= s.length <= 104
s
?僅由小寫英文組成1 <= k <= 104
第一種對法:
沒有庫函數(shù),雙指針法
class?Solution?{
public:
????string?reverseStr(string?s,?int?k)?{
???????int?fast,slow;
???????int?len?=?s.size()-1;
???????for(int?i?=?0;i<s.size();i+=2*k){
???????????fast?=?i,slow?=?min(i+k-1,len);
???????????if(fast>s.size()-1||slow>s.size()-1)return?s;
???????????while(fast<slow){
????????????????char?tmp?=?s[fast];
????????????????s[fast]?=?s[slow];
????????????????s[slow]?=?tmp;
????????????????fast++,slow--;
???????????}
???????}
???????return?s;
????}
};
第二種對法:
使用了庫函數(shù)
class?Solution?{
public:
????string?reverseStr(string?s,?int?k)?{
???????for(int?i=0;i<s.size();i+=(2*k)){
???????????if(i+k<=s.size()){
???????????????reverse(s.begin()+i,s.begin()+i+k);
???????????}else{
???????????????reverse(s.begin()+i,s.end());
???????????}
???????}
???????return?s;
????}
};