📜  门| GATE-CS-2017(Set 1)|问题16(1)

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

门| GATE-CS-2017(Set 1)|问题16

本文介绍了GATE-CS-2017(Set 1)的问题16,该问题要求我们编写一个程序,实现输入字符串和一个字符,输出该字符串中第一个不重复出现的字符的位置。

问题描述

给定一个字符串和一个字符,找到字符串中第一个不重复出现的给定字符的位置。例如,如果给定字符串为“geeksforgeeks”,字符为‘f’,则输出为5。

分析问题

为了解决这个问题,我们可以遍历字符串中的每个字符,并计算它的出现次数。一旦我们找到了字符的第一个出现,我们将其位置存储起来。当我们找到另一个出现时,我们可以检查上一个位置和当前位置之间是否有其他出现。如果没有,我们已经找到了一个不重复的字符,可以返回它的位置。如果我们没有找到不重复的字符,则返回-1。

实现代码

下面是实现该算法的Python代码:

def first_uniq_char(s: str, c: str) -> int:
    pos = -1
    char_count = {}
    for i in range(len(s)):
        if s[i] not in char_count:
            char_count[s[i]] = i
        elif s[i] == c:
            if pos == -1 or (char_count[c] < pos):
                pos = char_count[c]
            del char_count[c]
    if c in char_count and (pos == -1 or (char_count[c] < pos)):
        return char_count[c]
    return pos
代码解释
  • s: 包含给定字符串的字符串。
  • c: 要搜索的字符。
  • pos: 第一个不重复字符的位置。如果找不到,则为-1。
  • char_count: 字典,用于存储每个字符的出现次数。

首先,我们初始化变量poschar_count。然后,我们从左到右遍历字符串。对于每个字符,我们检查它是否已经出现。如果它还没有出现,我们将它的位置存储在char_count字典中。否则,我们检查它是否为给定字符。如果是,我们检查它是否为第一个不重复字符。如果是,我们将其位置存储在pos变量中。注意,我们只需要检查当前位置和上一个位置之间是否有其他出现的给定字符。一旦我们找到第一个不重复字符,我们可以删除char_count字典中的所有实例。最后,如果字典中仍然存在给定字符,则我们需要检查它是否为第一个不重复字符。

结论

我们已经讨论了GATE-CS-2017(Set 1)的问题16,并介绍了一种解决方案。我们通过遍历字符串中的字符,计算每个字符的出现次数,并找到第一个不重复字符来解决这个问题。我们用Python编写了代码,并对其进行了解释。