要求去除重复字符,且不能打乱顺序,实现最小字典序 我的思路是: 1、把字符串转为单个字符的列表 2、统计每个字符出现的次数 3、将相邻的字符比较,如果str[i]>=str[i+1],且srt[i]字符出现的个数大于等于2。则这个字符是应该去掉的。每轮去重后,重新给str赋值去重后的字符数组。 4.考虑到重复字符,应该使用while多次进行第3的操作,直到map的大小和字符串长度相等,则说明没有重复的字符了,停止循环。
import java.util.LinkedHashMap;
public class test {
public static void main(String[] args) {
//这里为第1.分割字符串
String[] str = "bcbcacac".split("");
//这里为第2.统计字符个数
LinkedHashMap<String, Integer> map = new LinkedHashMap<>();
for(String s : str){
map.put(s, map.getOrDefault(s, 0) + 1);
}
for(String key : map.keySet()){
System.out.println(key + " " + map.get(key));
}
String newstr = "";
boolean flag = true;
while (flag) {
for (int i = 0; i < str.length - 1; i++) {
//这里为第3.去重操作
if (str[i].compareTo(str[i + 1]) >= 0 && map.get(str[i]) >= 2) {
map.put(str[i], map.get(str[i]) - 1);
str[i] = null;
} else {
newstr = newstr + str[i];
}
}
if(map.get(str[str.length-1]) == 1) {
newstr = newstr + str[str.length - 1];
}
str = newstr.split("");
newstr = "";
if(map.size()==str.length){
flag = false;
}
}
for(String s : str) {
System.out.println(s);
}
}
}
例:
输入:bcbcacac 应输出:bac
力扣测试上也成功通过!