📌  相关文章
📜  找到重复删除第一个字符以清空给定字符串的游戏的获胜者(1)

📅  最后修改于: 2023-12-03 14:54:36.482000             🧑  作者: Mango

找到重复删除第一个字符以清空给定字符串的游戏的获胜者

题意描述

现有一个字符串,每次删除第一个重复出现的字符,直到字符串为空。假设你是这个游戏的获胜者,你需要返回获胜者的名字。

解题思路

此题可以使用栈来求解。每次向栈中插入一个字符。如果插入的字符和栈顶的字符相等,那么弹出栈顶的字符,即为删除第一个重复出现的字符。最后判断栈是否为空,如果为空则代表所有字符都已经删除完毕,返回获胜者的名字。

代码实现
def winner(str):
    stack = []
    
    for c in str:
        if stack and stack[-1] == c:
            stack.pop()
        else:
            stack.append(c)
    
    if not stack:
        return "Alice"
    else:
        return "Bob"
测试样例

对于字符串"abccbda",获胜者为Alice。

对于字符串"abcdcba",获胜者为Bob。

对于字符串"abcabcabc",获胜者为Alice。

时间复杂度分析

栈的插入和弹出操作都是O(1)的,所以整个算法的时间复杂度为O(n)。