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

查看3道真题和解析
美团工作强度 2569人发布