您的位置:首页 > 文旅 > 美景 > 制作网站的顺序是_连云港抖音优化_店铺推广平台有哪些_优化大师的优化项目有哪7个

制作网站的顺序是_连云港抖音优化_店铺推广平台有哪些_优化大师的优化项目有哪7个

2025/4/19 3:15:45 来源:https://blog.csdn.net/lcy57__/article/details/146460543  浏览:    关键词:制作网站的顺序是_连云港抖音优化_店铺推广平台有哪些_优化大师的优化项目有哪7个
制作网站的顺序是_连云港抖音优化_店铺推广平台有哪些_优化大师的优化项目有哪7个

文档讲解:代码随想录

难度:easy

附:冲

passion!!!passion!!!passion!!! 

卡码网题目链接(opens new window)

字符串的右旋转操作是把字符串尾部的若干个字符转移到字符串的前面。给定一个字符串 s 和一个正整数 k,请编写一个函数,将字符串中的后面 k 个字符移到字符串的前面,实现字符串的右旋转操作。

例如,对于输入字符串 "abcdefg" 和整数 2,函数应该将其转换为 "fgabcde"。

输入:输入共包含两行,第一行为一个正整数 k,代表右旋转的位数。第二行为字符串 s,代表需要旋转的字符串。

输出:输出共一行,为进行了右旋转操作后的字符串。

样例输入:

2
abcdefg 

样例输出:

fgabcde

数据范围:1 <= k < 10000, 1 <= s.length < 10000;

为了让本题更有意义,提升一下本题难度:不能申请额外空间,只能在本串上操作。 (Java不能在字符串上修改,所以使用java一定要开辟新空间)

思路

使用整体反转+局部反转

  1. 首先对整体反转
  2. 然后最后k个就是前k个,对前k个反转来恢复顺序
  3. 最后对剩下部分反转来完成

补充

 XOR 交换算法

XOR 交换算法是一种不需要临时变量就能交换两个值的方法。它的核心是利用 异或运算(XOR) 的性质:

  • 异或运算的性质:

    • a ^ a = 0

    • a ^ 0 = a

    • 异或运算是可逆的,即 (a ^ b) ^ b = a

  • 具体步骤:

    1. ch[start] ^= ch[end]:将 ch[start] 和 ch[end] 的值异或,结果存入 ch[start]

    2. ch[end] ^= ch[start]:用新的 ch[start] 值异或 ch[end],结果存入 ch[end],此时 ch[end] 变为原来的 ch[start]

    3. ch[start] ^= ch[end]:用新的 ch[end] 值异或 ch[start],结果存入 ch[start],此时 ch[start] 变为原来的 ch[end]

通过这三步,ch[start] 和 ch[end] 的值就完成了交换。

反转字符串的逻辑
  • start 指针从字符串的开头(索引 0)开始,end 指针从字符串的末尾(索引 strlen(ch) - 1)开始。

  • 每次交换 ch[start] 和 ch[end] 的值后,start 向右移动(start++),end 向左移动(end--)。

  • 当 start 不再小于 end 时,循环结束,此时字符串已经完全反转。

示例

假设 ch 是字符串 "hello"

  • 初始状态:start = 0end = 4ch = ['h', 'e', 'l', 'l', 'o']

  • 第一次交换后:ch = ['o', 'e', 'l', 'l', 'h']

  • 第二次交换后:ch = ['o', 'l', 'l', 'e', 'h']

  • 当 start 和 end 相遇时,循环结束,字符串变为 "olleh"

代码

import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner in = new Scanner(System.in);int n = Integer.parseInt(in.nextLine());String s = in.nextLine();int len = s.length();  //获取字符串长度char[] chars = s.toCharArray();reverseString(chars, 0, len - 1);  //反转整个字符串reverseString(chars, 0, n - 1);  //反转前一段字符串,此时的字符串首尾尾是0,n - 1reverseString(chars, n, len - 1);  //反转后一段字符串,此时的字符串首尾尾是n,len - 1System.out.println(chars);}public static void reverseString(char[] ch, int start, int end) {//异或法反转字符串,参照题目 344.反转字符串的解释while (start < end) {ch[start] ^= ch[end];ch[end] ^= ch[start];ch[start] ^= ch[end];start++;end--;}}
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com