正浩笔试编程第二题

正浩笔试编程第二题 2022.3.7

n长的小写字符串 求两两不相邻的组合


public class Main{
    public static void main(String[] args){

        Scanner scan = new Scanner(System.in);
        int n = scan.nextInt();
        String s = scan.next();
        int[] alpha = new int[26];

        boolean flag = true;
        for(int i=0;i<s.length();i++){
            alpha[s.charAt(i)-'a']++;
            if(alpha[s.charAt(i)-'a']>(n/2)) flag=false;
        }
        if(!flag){
            System.out.println("no");
            return;
        }
        System.out.println("yes");
        Stack<Integer> stack = new Stack<>();
        for(int i=0;i<26;i++){
            if(dfs(stack,alpha,i)){
                for(Integer j:stack){
                    System.out.print((char)(j+'a'));
                }
                System.out.println();
                break;
            }

        }
    }
    public static boolean dfs(Stack<Integer> s,int[] alpha,int a){
        if(alpha[a]==0) return false;
        if(!s.isEmpty()&&a==s.peek()) return false;
        s.add(a);
        alpha[a]--;
        boolean ans=true;
        boolean flag=false;
        for(int i=0;i<26;i++){
            if(alpha[i]!=0){
                flag=true;
                if(dfs(s,alpha,i)) return true;
            }
        }
        if(!flag){
            return  true;
        }
        s.pop();
        alpha[a]++;
        return false;
    }

}
全部评论

相关推荐

中信银行 AI算法岗 29~32w
点赞 评论 收藏
转发
点赞 3 评论
分享
牛客网
牛客企业服务