哔哩哔哩笔试——04.20
题目
写完回宿舍看《辐射》去了,现在凭着记忆写一下,若有错误请指正。
-
给定n个数字,问有多少个连续的子序列(可首尾相连)
-
给定字符串,从头到尾依次翻转长度为k的所有子串
Input:8 5 nowcoder
Output:odernowc
题解
-
直接结论
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); long n = in.nextLong(); System.out.println(n * (n - 1) + 1); } }
-
模拟
- 提前从
k-1
开始的子串。这是因为在翻转长度为k的子串后,前k个字符将被移动到字符串的末尾。 - 然后,若剩余的字符串长度
n-k
是奇数,则输出打印出前k-1
个字符。这是因为在奇数次翻转后,前k-1
个字符的顺序将保持不变。 - 否则输出前
k-1
个字符的逆序。这是因为在偶数次翻转后,前k-1
个字符的顺序将被反转。
import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner in = new Scanner(System.in); int n = in.nextInt(), k = in.nextInt(); String s = in.next(); System.out.print(s.substring(k - 1)); if ((n - k) % 2 == 1) System.out.println(s.substring(0, k - 1)); else { for (int i = 0; i < k - 1; ++i) System.out.print(s.charAt(k - i - 2)); } } }
- 提前从