本文主要是介绍C++ 541、反转字符串 II ->双指针应用,模拟情况,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
- 反转字符串 II
简单
565
相关企业
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例 1:
输入:s = “abcdefg”, k = 2
输出:“bacdfeg”
示例 2:
输入:s = “abcd”, k = 2
输出:“bacd”
提示:
1 <= s.length <= 104
s 仅由小写英文组成
1 <= k <= 104
class Solution {
public:string reverseStr(string s, int k) {for(int i = 0; i < s.size(); i ++) {int j = i;while((j - i) < 2 * k -1 && j < s.size()) {j ++;}//cout<<j<<endl;if(j - i > k - 1 && j - i <= 2*k - 1) {for(int t = i, q = i + k - 1; t < q; t ++, q --) {char x = s[t];s[t] = s[q];s[q] = x;}} else if(j - i >= 0 && j - i <= k - 1) {for(int t = i, q = j - 1; t < q; t ++, q--) {char x = s[t];s[t] = s[q];s[q] = x;}}i = j;}return s;}
};
思路:双指针ij,j指针往前探路,要么探到最后,要么在2个k的长度时停下,这是j的值为最后探到的字符+1的位置,然后分两种情况反转字符就行,翻转字符也是使用双指针。
这篇关于C++ 541、反转字符串 II ->双指针应用,模拟情况的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!