题解 | 小红的字符串构造
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动态字符串才不会超时