如:
输入:234432
输出:432
代码如下:
package test2;
import java.util.Collections;
import java.util.Map;
import java.util.Scanner;
import java.util.TreeMap;
import java.util.TreeSet;
public class Main5 {
// 华为机试第二题,取消重复数字后的最大数,比如输入的是:423234,输出是:432
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
TreeSet<Integer> set = new TreeSet<Integer>();
String[] strArr ;
int k = 0;
Long maxNum = 0L;
int st = 0;
TreeMap<Long, Boolean> map = new TreeMap<Long, Boolean>();
while(sc.hasNext()){
String line = sc.nextLine();
/*
* 思路:
* 1、首先将字符串去重后得到的数放入一个大小小于10的数组中;
* 2、枚举出所有由这些数字组成的数;
* 3、将这些数放入TreeSet集合中;
* 4、遍历TreeSet集合,判断元素是否在原始串中出现过,若没出现则将其删除;
* 5、最后取出TreeSet中最后一个元素就是最大整数。
* */
// 1、首先将字符串去重后得到的数放入一个大小小于10的数组中;
for(int i=0 ; i<line.length() ; i++){
set.add(Character.getNumericValue(line.charAt(i)));
}
strArr = new String[set.size()];
for (Integer in : set) {
strArr[k] = in + "";
k++;
}
// 2、枚举出所有由这些数字组成的数;3、将这些数放入TreeSet集合中;
permutate(strArr, st, map);
// 4、遍历TreeSet集合,判断元素是否在原始串中出现过,若没出现则将其删除;
for (Map.Entry<Long, Boolean> entry: map.entrySet()) {
Long key = entry.getKey();
boolean isFind = findStrByKey(line, key);
if(isFind){
map.put(key, true);
}
}
// 5、最后取出TreeMap中最后一个元素就是最大整数。
for (Map.Entry<Long, Boolean> entry: map.entrySet()) {
if(entry.getValue()){
maxNum = entry.getKey();
}
}
System.out.println(maxNum);
}
}
private static boolean findStrByKey(String line, Long key) {
String keyStr = key.toString();
String[] temp = new String[keyStr.length()];
int k = 0;
int j = 0;
for (int i = 0; i < keyStr.length(); i++) {
temp[i] = keyStr.charAt(i) + "";
// temp[i] = Character.getNumericValue(keyStr.charAt(i)) + "";
}
while(k<temp.length){
while(j<line.length()){
if(temp[k].equals(line.charAt(j)+"")){
k++;
j++;
break;
}
j++;
}
if(j==line.length()){
break;
}
}
// 最终判断k是否到达末尾就可知存不存在;
if(k==temp.length){
return true;
}
return false;
}
public static void permutate(String[] strArr, int st, TreeMap<Long, Boolean> map){
if(st == strArr.length-1){
// 将当前字符串数组表示的整数存入set。
StringBuilder sb = new StringBuilder();
// 打印当前字符串
for (int i = 0; i < strArr.length; i++) {
String string = strArr[i];
// System.out.print(string + "");
sb.append(string);
}
// System.out.println();
String s = sb.toString();
map.put(new Long(s), false);
}else {
for(int i=st ; i<strArr.length ; i++){
swap(strArr, i, st);
permutate(strArr, st + 1, map);
swap(strArr, i, st);
}
}
}
private static void swap(String[] strArr, int i, int st) {
String temp = strArr[i];
strArr[i] = strArr[st];
strArr[st] = temp;
}
}
如发现问题,欢迎留言!