【微众银行2020实习笔试】博弈论:Cassidy和Eleanore是一对好朋友,她们经常会一起玩游戏。某一天她们玩了一个回文游戏。游戏规则是这样的:给出一个仅包含小写字母的字符串S,在每一个人的回合

题目描述

Cassidy和Eleanore是一对好朋友,她们经常会一起玩游戏。某一天她们玩了一个回文游戏。游戏规则是这样的:给出一个仅包含小写字母的字符串S,在每一个人的回合中,她们会进行两个操作:

  1. 尝试重新排列这个字符串,如果可以把这个字符串排列成回文字符串,则立即获胜。

  2. 否则,她们必须删掉字符串中的一个字符。

已知,Cassidy先手,在两个人都采取最佳策略的情况下,谁可以获胜。

输入
输入第一行仅包含一个正整数t,表示数据组数,(t<=10)

接下来有t行,每行有一个字符串S,表示一组测试数据。(|S|<=1000)

输出
对于每组数据输出一行,如果Cassidy获胜,则输出Cassidy,否则输出Eleanore

样例输入
2
aba
ab
样例输出
Cassidy
Eleanore

作者:Galliano、
链接:https://www.nowcoder.com/discuss/403152?type=all&order=time&pos=&page=1
来源:牛客网

/**
 * 微众 第 2 题,先手博弈问题
 */
public static void main2(String[] args) {
    Scanner sc = new Scanner(System.in);
    int t = Integer.parseInt(sc.nextLine());
    for (int i = 0; i < t; i++) {
        String str = sc.nextLine();
        System.out.println(whoWin(str));
    }
    sc.close();
}
private static String whoWin(String str) {
    String p1 = "Cassidy", p2 = "Eleanore"; // p1先手
    // 判断奇数次字符的个数
    // 若该个数为 奇数次,则无论如何都是 Cassidy 赢;
    // 若该个数为 偶数次,则无论如何都是 Eleanore 赢
    return ((oddCharNum(str) & 1) != 0) ? p1 : p2;
}
 
// 判断一个字符串的出现奇数次字符的个数
private static int oddCharNum(String str) {
    int[] arr = new int[26];
    for (int i = 0; i < str.length(); i++) arr[str.charAt(i) - 'a'] += 1;
 
    int oddNum = 0; // 奇数次字符的个数
    for (int num : arr) {
        if ((num & 1) != 0) oddNum++; // 该字符出现了奇次
    }
    return oddNum;
}
 
//  该方法没有被使用
// 判断一个字符串串能否被重排成回文串
private  static boolean canPalindromic(String str) {
    int[] arr = new int[26];
    for (int i = 0; i < str.length(); i++) arr[str.charAt(i) - 'a'] += 1;
 
    int count = 0;
    // 若有两个以上字符出现了奇次,则一定不是回文串,否则是回文串
    for (int num : arr) {
        if ((num & 1) != 0) { // 出现奇次的字符
            count++;
            if (count >= 2) return false;
        }
    }
    return true;
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值