华为机试第二题:去除重复数字的最大数 求大佬看看是否正确
华为机试第二题:去除重复数字的最大数 求大佬看看是否正确?不晓得怎么找测试用例
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(); } }
#华为#