题解 | 小红的字符串构造

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动态字符串才不会超时

全部评论

相关推荐

06-28 22:48
已编辑
广东金融学院 Java
小浪_Coding:学院本+这俩项目不是buff叠满了嘛
点赞 评论 收藏
分享
陈逸轩1205:才105 哥们在养生呢
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务