给定一个字符串s和一个整数k。你可以从s的前k个字母中选取一个,将它放到字符串的末尾。
请返回执行上述步骤任意次数后,字典上最小的字符串。
示例1:
输入:s = "cba", k = 1
输出:"acb"
解释:
在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。
在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。
这道题只需要考虑2种情况:
char min = s.charAt(0);
List list = new ArrayList<>();
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if (c < min) {
min = c;
list = new ArrayList<>();
list.add(i);
} else if (c == min) {
list.add(i);
}
}
List list1 = new ArrayList<>();
for (Integer index : list) {
list1.add(s.substring(index) + s.substring(0, index));
}
Collections.sort(list1);
return list1.get(0);
char[] array = s.toCharArray(); Arrays.sort(array); return new String(array);
综合上述代码,给出实现代码:
-
- import java.util.ArrayList;
- import java.util.Arrays;
- import java.util.Collections;
- import java.util.List;
-
- class Solution {
- public String orderlyQueue(String s, int k) {
- if (k > 1) {
- char[] array = s.toCharArray();
- Arrays.sort(array);
- return new String(array);
- } else {
- char min = s.charAt(0);
- List
list = new ArrayList<>(); - char[] chars = s.toCharArray();
- for (int i = 0; i < chars.length; i++) {
- char c = chars[i];
- if (c < min) {
- min = c;
- list = new ArrayList<>();
- list.add(i);
- } else if (c == min) {
- list.add(i);
- }
- }
-
- List
list1 = new ArrayList<>(); - for (Integer index : list) {
- list1.add(s.substring(index) + s.substring(0, index));
- }
- Collections.sort(list1);
- return list1.get(0);
- }
- }
- }
这道题不是很复杂,主要在考虑清楚如何获取字典上最小的字符串。通过分析,能发现k=1时需要做字符串排序操作,当k>1时只需要对原来的字符串做排序就可以了。
通过上述代码能比较快速的解决上述问题,期望有更加高效的方案给出来,欢迎回复。