华为机试第二题:去除重复数字的最大数 求大佬看看是否正确

华为机试第二题:去除重复数字的最大数 求大佬看看是否正确?不晓得怎么找测试用例

import java.util.Scanner;
/**
 * Created by Lin on 2017/8/26.
 *
 */
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        /**
         * 已测样例
         * 123456  -->123456
         * 32432  -->432
         * 223432 -->432
         * 2343   -->243
         */
        while (scanner.hasNext()){
            String str = scanner.next();
            System.out.println(getMax(str));
        }
        scanner.close();
    }
    public static String getMax(String str){
        int [] nums = new int[10];//记录每个数字出现的次数
        char[] chars = str.toCharArray();
        int count = 0;//去除重复数字后的数的长度
        for (int i=0;i<chars.length;i++){
            int index = chars[i] - '0';
            if ( nums[index] ==0)count++;
            nums[index]++;
        }
        StringBuilder builder = new StringBuilder(str);
        // 贪心法去除重复数字
        while (builder.length()>count){
            for (int i=0;i<builder.length()-1;i++){
                char c = builder.charAt(i);
                //如果i位置的字符小于i+1位置的字符则删除,nums对应的出现次数也更新
                if (builder.charAt(i)<builder.charAt(i+1) && nums[c-'0']>1){
                    builder.deleteCharAt(i);
                    nums[c-'0']--;
                }
            }
        }
        return builder.toString();
    }
}


#华为#
全部评论
华为有消息吗?
点赞
送花
回复
分享
发布于 2017-08-26 09:09
显然是不对的吧
点赞
送花
回复
分享
发布于 2017-08-26 09:35
秋招专场
校招火热招聘中
官网直投
解法对呢,另一种思路,倒着来,每次判断当前数字有没有在结果序列出现,如果没有插入序列头,如果序列已经有当前数字,且当前数字大于序列头,将当前数字插入序列头,同时删除原有的,这样遍历一次就可以了。
点赞
送花
回复
分享
发布于 2017-08-28 12:13

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务