算法day25 右旋字符串

题目描述

思路:双指针
对于符合题目要求的目标字符串,我们可以拥有一种这样的想法。首先,我们想要使倒数k位前置并且正向的顺序不改变,那么我们可以先整体反转,以abcdefg为例,即可得到gfedcba,此时k值要求为2,那么也即要使当前逆转过的倒序序列的前k项反转回来,即0至k-1反转,随后在将之后的k至序列末的区间再次反转,即可符合右旋字符串。要注意对于左右指针的更新的值,保证正确的设置指针。

代码如下:

#include <iostream>

  int main() {


    int k;
    std::string s;
    std::cin >> k;
    std::cin >> s;
    int left = 0;
    int right = s.size() - 1;
    char temp;
    while (left < right) {
	  temp = s[left];
	  s[left] = s[right];
	  s[right] = temp;
	  right--;
	  left++;
  }
   left = 0;
   right = k - 1;
   while (left < right) {
	temp = s[left];
	s[left] = s[right];
	s[right] = temp;
	right--;
	left++;
}
  left = k;
  right = s.size() - 1;
  while (left < right) {
	temp = s[left];
	s[left] = s[right];
	s[right] = temp;
	right--;
	left++;
}

  std::cout << s;

  return 0;
 }

时间复杂度:O(n)
空间复杂度:O(1)

END

posted on 2025-05-07 21:27  sakura430  阅读(8)  评论(0)    收藏  举报