假设我们有一个带有小写字母的字符串S,现在有两个玩家在玩游戏。规则如下-
如果玩家可以任意移动字符串的字符以得到回文字符串,则该玩家将赢得比赛。
玩家必须从字符串中删除任何字符时无法赢。
我们必须记住,两个玩家都以最佳状态玩游戏,而player1开始游戏。我们必须找到游戏的赢家。
因此,如果输入类似于“ pqpppq”,则输出将是Player1,因为第一步中的player-1安排角色以获得“ ppqqpp”并赢得了游戏。
为了解决这个问题,我们将遵循以下步骤-
l:=序列大小
freq:=列出大小为26并填充0的列表
对于范围在0到l之间的i,增加1,
返回2
返回1
如果freq [i] mod 2不为0,则
数:=数+ 1
将序列[i]的频率增加1
计数:= 0
对于0到25范围内的i,执行
如果count为0或count为奇数,则
除此以外,
让我们看下面的实现以更好地理解-
def who_is_the_winner(sequence): l = len(sequence) freq = [0 for i in range(26)] for i in range(0, l, 1): freq[ord(sequence[i]) - ord('a')] += 1 count = 0 for i in range(26): if (freq[i] % 2 != 0): count += 1 if (count == 0 or count & 1 == 1): return 1 else: return 2 sequence = "pqpppq" print("Player:", who_is_the_winner(sequence) )
"pqpppq"
输出结果
Player: 1