解题思路:采用两个列表分别存储字符串中出现的字符和次数,然后用直接选择排序按照字符存储的值升序排序两个列表,最后输出结果。

import java.util.*;
public class Main{
 public static void main(String arg[]){
        Scanner scan=new Scanner(System.in);
        String str=scan.nextLine();
        List<Integer> list1=new ArrayList<>();
        List<Character> list2=new ArrayList<>();
        int k=0;
        for(int i=0;i<str.length();i++){
            if(list2.contains(str.charAt(i))){
                k=list2.indexOf(str.charAt(i));
                list1.set(k, list1.get(k)+1);
            }
            else {
                list2.add(str.charAt(i));
                list1.add(1);
            }
        }
        sortList(list1,list2);
        for(int i=0;i<list1.size();i++) {
            System.out.print(list2.get(i));
            System.out.print(list1.get(i));
        }

    }
    public static void sortList(List<Integer> list1,List<Character> list2) {
        char c='a';
        int t=0;
        int k=list1.size()-1;
        int m=0;
        for(int i=k;i>=0;i--) {
            c=list2.get(i);
            t=i;
            for(int j=0;j<=i;j++) {
                if(list2.get(j)>c) {
                    c=list2.get(j);
                    t=j;
                }
            }
            list2.set(t, list2.get(i));
            m=list1.get(t);
            list1.set(t, list1.get(i));
            list2.set(i, c);
            list1.set(i, m);
        }

    }
}