📅  最后修改于: 2023-12-03 14:50:47.075000             🧑  作者: Mango
这是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()
的函数,该函数接受一个字符串参数,并返回第一个不重复的字符。实现中,我们使用一个哈希表来记录每个字符的出现次数。然后再遍历一遍整个字符串,找到第一个出现一次的字符即可。
这个问题涉及了一些常用的数据结构和算法,特别是哈希表。通过这个问题的解决,我们可以更好地理解字符串的处理方法,并用哈希表来解决查找问题。