记录每日LeetCode 316.去除重复字母 Java实现
2023-12-13 09:56:18
题目描述:
给你一个字符串 s
,请你去除字符串中重复的字母,使得每个字母只出现一次。需保证 返回结果的字典序最小(要求不能打乱其他字符的相对位置)。
初始代码:
class Solution {
public String removeDuplicateLetters(String s) {
}
}
示例1:
输入:s = "bcabc"
输出: "abc"
示例2:
输入:s = "cbacdcbc"
输出: "acdb"
参考答案:
class Solution {
public String removeDuplicateLetters(String s) {
// 记录每个字母是否不存在更多
boolean[] isNotMore = new boolean[26];
// 记录每个字母出现的个数
int[] count = new int[26];
for (int i = 0; i < s.length(); ++i) {
count[s.charAt(i) - 'a']++;
}
// 对字符串进行遍历拼接
StringBuilder sb = new StringBuilder();
for (int i = 0; i < s.length(); ++i) {
char c = s.charAt(i);
if (!isNotMore[c - 'a']) {
// 为了保证字典序小 故需要在各字符保证一个情况下递增ASCII码
while (sb.length() > 0 && sb.charAt(sb.length() - 1) > c) {
// 字母后续还有则删除前面出现的 保证递增ASCII码 否则跳出while循环
if (count[sb.charAt(sb.length() - 1) - 'a'] > 0) {
isNotMore[sb.charAt(sb.length() - 1) - 'a'] = false;
sb.deleteCharAt(sb.length() - 1);
} else {
break;
}
}
// 程序走到这代表ASCII码递增 且后续出现相同字符无需进入if中
isNotMore[c - 'a'] = true;
sb.append(c);
}
count[c - 'a'] -= 1;
}
return sb.toString();
}
}
文章来源:https://blog.csdn.net/m0_65563175/article/details/134828892
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!