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

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

国际空间研究组织 | ISRO CS 2014 |问题 50

这是2014年的ISRO CS(印度国际空间研究组织计算机科学)考试的问题50。这道问题涉及数据结构和算法。

问题描述

在一个字符串中,找到第一个不重复的字符。例如,如果输入“geeksforgeeks”,输出为“f”。

解决方案

一个简单的方法是使用双重循环。对于每个字符,遍历剩余的字符,查看它是否与当前字符匹配。如果没有匹配,那么这是第一个不重复的字符。但是,这个方法的时间复杂度为O(n^2),效率不高。

更好的方法是使用哈希表。我们首先遍历一遍整个字符串,统计每个字符出现的次数。然后再遍历一遍整个字符串,找到第一个出现一次的字符即可。

下面是一个C++实现示例:

#include <iostream>
#include <unordered_map>
using namespace std;

char findFirstNonRepeatingChar(string str) {
    // Count the frequency of each character using a hash table
    unordered_map<char, int> freq;
    for (int i = 0; i < str.length(); i++) {
        freq[str[i]]++;
    }

    // Find the first non-repeating character
    for (int i = 0; i < str.length(); i++) {
        if (freq[str[i]] == 1) {
            return str[i];
        }
    }

    return '\0'; // No non-repeating characters found
}

int main() {
    string str = "geeksforgeeks";
    char result = findFirstNonRepeatingChar(str);
    if (result != '\0') {
        cout << "First non-repeating character is: " << result << endl;
    } else {
        cout << "No non-repeating characters found" << endl;
    }
    return 0;
}

在上面的示例中,我们首先定义一个名为 findFirstNonRepeatingChar() 的函数,该函数接受一个字符串参数,并返回第一个不重复的字符。实现中,我们使用一个哈希表来记录每个字符的出现次数。然后再遍历一遍整个字符串,找到第一个出现一次的字符即可。

结论

这个问题涉及了一些常用的数据结构和算法,特别是哈希表。通过这个问题的解决,我们可以更好地理解字符串的处理方法,并用哈希表来解决查找问题。