import java.util.*; public class Solution{ public static void main(String[] arg){ Scanner in = new Scanner(System.in); String init = in.next(); char[] ch = init.toCharArray(); //System.out.println(ch); int len = ch.length; char big = 'a'; for(int i = 0; i<len; i++){ if(ch[i]>big){ big = ch[i]; } } ArrayList<Character> list = new ArrayList<>(); char temp = 'a'; int count = 0; for(int i = 0; i<len; i++){ if(ch[i] == big){ count++; } } int cnt = 0; for(int i = len-1; i>0; i--){ if(ch[i]!=big && !list.contains(ch[i])){ list.add(ch[i]); }else if(ch[i] == big){ list.add(ch[i]); cnt++; }else if(ch[i]!=big && ch[i]>temp && cnt<count){ list.add(ch[i]); } temp = ch[i]; } Collections.reverse(list); String re = ""; for(int i = 0; i<list.size(); i++){ re += String.valueOf(list.get(i)); } System.out.println(re); } } //bcadabdcbbcad 这题一直报错,最后一分钟才发现问题,可是来不及改了,多出来两分钟改完了,mmp,也不知道能通过多少0.0 思路是:倒序遍历,第一次出现的字符一定保留,不是第一次出现的但是比上一个大的保留而且 没有遍历到最后一个最大字符的保留,最大字符一定保留。反正例子里头最复杂的那个肯定可以通过。