55. 右旋字符串(第八期模拟笔试)
- 原题链接:
- 完成情况:
- 解题思路:
- 参考代码:
- 错误经验吸取
原题链接:
55. 右旋字符串(第八期模拟笔试)
https://kamacoder.com/problempage.php?pid=1065
完成情况:
解题思路:
* 给定一个字符串 s 和一个正整数 k*将字符串中的后面 k 个字符移到字符串的前面** 即所有元素当做一个环,输入k,则所有元素向右移动k个位置** 数据范围:* 1 <= k < 10000,* 1 <= s.length < 10000;*** @param s* @param k解题思路:将所有数存储在一个数组中,然后通过取模运算,构造出一个循环数组然后也没有空间要求,就可以再构造一个辅助空间,来搞快点
参考代码:
package 代码随想录.栈与队列.__55;import java.util.Scanner;public class 右旋字符串_第八期模拟笔试 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);int n = scanner.nextInt();scanner.nextLine();String s = scanner.nextLine();System.out.println(rightRotateString(s, n));}/*** 给定一个字符串 s 和一个正整数 k*将字符串中的后面 k 个字符移到字符串的前面** 即所有元素当做一个环,输入k,则所有元素向右移动k个位置** 数据范围:* 1 <= k < 10000,* 1 <= s.length < 10000;*** @param s* @param k*/private static String rightRotateString(String s, int k) {/*解题思路:将所有数存储在一个数组中,然后通过取模运算,构造出一个循环数组然后也没有空间要求,就可以再构造一个辅助空间,来搞快点*/char [] arr = new char[s.length()];for (int i = 0; i < s.length(); i++) {arr[i] = s.charAt((i-k+s.length())% s.length());}StringBuilder sb = new StringBuilder();for (int i = 0; i < s.length(); i++) {sb.append(arr[i]);}//System.out.println("傻逼?");//System.out.println(sb.toString());return sb.toString();}
}