当前位置:网站首页>力扣解法汇总899-有序队列
力扣解法汇总899-有序队列
2022-08-03 18:55:00 【失落夏天】
目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣
描述:
给定一个字符串 s 和一个整数 k 。你可以从 s 的前 k 个字母中选择一个,并把它加到字符串的末尾。
返回 在应用上述步骤的任意数量的移动后,字典上最小的字符串 。
示例 1:
输入:s = "cba", k = 1
输出:"acb"
解释:
在第一步中,我们将第一个字符(“c”)移动到最后,获得字符串 “bac”。
在第二步中,我们将第一个字符(“b”)移动到最后,获得最终结果 “acb”。
示例 2:
输入:s = "baaca", k = 3
输出:"aaabc"
解释:
在第一步中,我们将第一个字符(“b”)移动到最后,获得字符串 “aacab”。
在第二步中,我们将第三个字符(“c”)移动到最后,获得最终结果 “aaabc”。
提示:
1 <= k <= S.length <= 1000
s 只由小写字母组成。
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/orderly-queue
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
* 解题思路: * 看k的大小,如果k大于1,那么其实就等于插入排序,所以经过若干轮的排序后,一定能形成最小字典字符串。 * 如果k=1,则找出字典上最小字符串即可
代码:
public class Solution899 {
public String orderlyQueue(String s, int k) {
StringBuilder builder = new StringBuilder();
char[] chars = s.toCharArray();
if (k > 1) {
int[] charNums = new int[26];
for (int i = 0; i < chars.length; i++) {
char aChar = chars[i];
charNums[aChar - 'a']++;
}
for (int i = 0; i < charNums.length; i++) {
int num = charNums[i];
if (num == 0) {
continue;
}
for (int n = 0; n < num; n++) {
builder.append((char) (i + 'a'));
}
}
return builder.toString();
}
for (int i = 0; i < chars.length; i++) {
if (builder.length() == 0) {
builder.append(s);
continue;
}
for (int j = 0; j < builder.length(); j++) {
int newIndex = i + j;
newIndex = newIndex >= builder.length() ? newIndex - builder.length() : newIndex;
char newChar = chars[newIndex];
char lastMinChar = builder.charAt(j);
if (newChar == lastMinChar) {
continue;
}
if (newChar > lastMinChar) {
break;
}
builder.setLength(0);
builder.append(s.substring(i));
builder.append(s, 0, i);
}
}
return builder.toString();
}
}
边栏推荐
猜你喜欢
MySQL如何 drop 大表
[Azure Event Hub] Create Event Hub Consume Client + Custom Event Position with Azure AD Authentication
盲僧发现了华点——教你如何使用API接口获取数据
MySQL如何一劳永逸的永久支持输入中文
阿里资深专家打造从零开始学架构,含阿里内部技术栈PPT、PFD实战
爬虫之selenium
字节跳动三面拿offer:网络+IO+redis+JVM+GC+红黑树+数据结构,助你快速进大厂!!
Zhong Hua, senior architect of Ali: China-Taiwan strategic thinking and architecture practice; including internal implementation manual
智能合约安全——delegatecall (2)
Chrome浏览器开发新截图工具,安全浏览器截图方法
随机推荐
盲僧发现了华点——教你如何使用API接口获取数据
LineSegmentTree线段树
6000 字+,帮你搞懂互联网架构演变历程!
快手通过国际权威信息安全和隐私保护认证,安全能力达到国际领先水平
首届MogDB征文活动开启啦!
Intelligent security contract - delegatecall (2)
【微信小程序】NFC 标签打开小程序
【汇编语言03】第2章 寄存器——实验1:查看CPU和内存,用机器指令和汇编指令编程
[Dataset][VOC] Rat dataset voc format 3001 sheets
POJ 3041 Asteroids(最大匹配数=最小点覆盖)
有人知道flink sql 使用tableEnv.executeSql执行后,怎么获取到任务运行的
Shell:循环语句
VsCode preview Geojson data
SQL代码需要供其他人复用,为什么传统的复制代码不可靠?
JumpServer开源堡垒机完成龙芯架构兼容性认证
201712-3 CCF Crontab满分题解
ImportError: /lib/libgdal.so.26: undefined symbol: sqlite3_column_table_name
Mkke:为什么无法从Oracle 11g或12c升级到Oracle 23c?
分享即时通讯开发之WebSocket:概念、原理、易错常识、动手实践
【C语言学习笔记(六)】分支与跳转(if、else、continue、break、switch)