📌  相关文章
📜  国际空间研究组织 | ISRO CS 2008 |问题 30(1)

📅  最后修改于: 2023-12-03 15:07:33.366000             🧑  作者: Mango

国际空间研究组织 | ISRO CS 2008 |问题 30

该问题要求实现一个函数,以字符串作为输入参数,将根据以下规则进行操作:

  1. 如果字符串中仅有一个字符,则返回该字符。
  2. 如果字符串中存在重复字符,则去掉重复字符,返回第一个不重复的字符。
  3. 如果字符串中没有重复字符,则返回第一个字符。
实现思路

首先根据题目描述,应该明确函数的输入和输出:

def first_nonrepeat(string: str) -> str:
    pass

接下来考虑如何实现这个函数,可以使用哈希表来记录每个字符出现的次数,同时用一个队列来记录第一个不重复的字符的顺序,最终输出队列的第一个元素即可。

首先遍历一次字符串,记录每个字符出现的次数:

def first_nonrepeat(string: str) -> str:
    count = {}
    for c in string:
        count[c] = count.get(c, 0) + 1
    # 代码片段1

接下来再遍历一次字符串,将第一个不重复的字符加入队列:

def first_nonrepeat(string: str) -> str:
    count = {}
    for c in string:
        count[c] = count.get(c, 0) + 1
    queue = []
    for c in string:
        if count[c] == 1:
            queue.append(c)
            if len(queue) > 1:
                break
    # 代码片段2

如果队列中有元素,则输出第一个元素,否则输出字符串的第一个字符:

def first_nonrepeat(string: str) -> str:
    count = {}
    for c in string:
        count[c] = count.get(c, 0) + 1
    queue = []
    for c in string:
        if count[c] == 1:
            queue.append(c)
            if len(queue) > 1:
                break
    return queue[0] if queue else string[0]
完整代码
def first_nonrepeat(string: str) -> str:
    count = {}
    for c in string:
        count[c] = count.get(c, 0) + 1
    queue = []
    for c in string:
        if count[c] == 1:
            queue.append(c)
            if len(queue) > 1:
                break
    return queue[0] if queue else string[0]