题解 | 小红的字符串构造
import java.util.Scanner;
import java.util.HashSet;
import java.util.HashMap;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
String s = new Scanner(System.in).nextLine().trim();
HashSet<String> set = new HashSet<>();
for(int i=0;i<s.length();i++){
set.add(s.substring(i,i+1));
}
HashMap<String,Integer> hsp = new HashMap<>();
for(String tmp:set) hsp.put(tmp,0);
if(set.size()<2) System.out.println(-1);
else{
StringBuffer sb = new StringBuffer();
for(int i=0;i<s.length();i++){
String sub_s = s.substring(i,i+1);
for(String tmp:set){
// System.out.println("tmp:"+tmp+" sub_s:"+sub_s+" hsp:"+hsp);
// System.out.println(hsp.containsKey(tmp)+" "+tmp.equals(sub_s));
if(tmp.equals(sub_s)) continue;
if (!hsp.containsKey(tmp) && !hsp.isEmpty()) continue;
sb.append(tmp);
hsp.remove(tmp);
// System.out.println("tmp:"+tmp+" hsp:"+hsp+" i:"+i+" res:"+res);
break;
}
}
System.out.println(sb.toString());
}
}
}
第二个版本,也是比较好想到的版本:
①建立字符集set
②建立哈希表,表示还没有使用过的字符
③拼接字符,尽量使用还没有在字符集set中用过的。如果已经用完了就无所谓
④注意:用StringBuffer动态字符串才不会超时
顺丰集团工作强度 276人发布
查看3道真题和解析