1 题目:
给定一个字符串 s
和一个整数 k
,从字符串开头算起,每计数至 2k
个字符,就反转这 2k
字符中的前 k
个字符。
- 如果剩余字符少于
k
个,则将剩余字符全部反转。 - 如果剩余字符小于
2k
但大于或等于k
个,则反转前k
个字符,其余字符保持原样。
2 参考 :
3 代码:
C++
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;
}
};
Python
class Solution:
def reverseStr(self, s: str, k: int) -> str:
p = 0
while p < len(s):
p2 = p + k
# Written in this could be more pythonic.
s = s[:p] + s[p: p2][::-1] + s[p2:]
p = p + 2 * k
return s
4 思路:
其实在遍历字符串的过程中,只要让 i += (2 * k),i 每次移动 2 * k 就可以了,然后判断是否需要有反转的区间。