查找一个字符串中第一个只出现两次的字符

本文介绍了一种在字符串中寻找第一个恰好出现两次的字符的方法,采用辅助数组记录字符出现次数,实现时间复杂度O(N)与空间复杂度O(1)。

题目:查找一个字符串中第一个只出现两次的字符。比如:“abcdefabcdefabc”中第一个只出现两次为‘d’,要求时间复杂度为O(N),空间复杂度为O(1)


思路:

创建一个辅助数组(大小为256),数组的下标表示字符的ASCII码,遍历字符串,每出现一个,在对应位置加一,最后遍历数组就可以找到第一个出现两次的字符


代码:

char find_char_instr(std::string  &str)
{
     char num_of_char[256] = { '\0' };
     for (size_t idx = 0; idx < str.size(); ++idx)
     {
          num_of_char[str[idx]]++;
     }
     
     for (size_t idx = 0; idx < str.size(); ++idx)
     {
          if (num_of_char[str[idx]] == 2)
              return str[idx];
     }
     
     return '\0';
}
int main()
{
     std::string  str = "abdecefabcdfabc";
     char ret = find_char_instr(str);
     if (ret == '\0')
          cout << "没有出现两次的字符。" << endl;
     else
          cout << "第一个出现两次的字符为 :" << ret << endl;
     system("pause");
     return 0;
}

### 查找字符串中仅出现一次的字符字符串查找仅出现一次的字符,可以通过统计每个字符的出现次数来实现。以下是具体的实现方法和代码示例。 #### 方法描述 1. 使用一个字典(或哈希表)记录每个字符的出现次数。 2. 遍历字符串中的所有字符,并将字符作为键,其出现次数作为值存储到字典中。 3. 再次遍历字符串,找到字典中值为 1 的字符,即为仅出现一次的字符。 这种方法的时间复杂度为 O(n),其中 n 是字符串的长度,因为需要两次遍历字符串。 #### Python 实现 以下是一个使用 Python 实现的代码示例: ```python def find_unique_characters(s): char_count = {} for char in s: # 第一次遍历,统计每个字符的出现次数 if char in char_count: char_count[char] += 1 else: char_count[char] = 1 unique_chars = [] for char in s: # 第二次遍历,找出仅出现一次的字符 if char_count[char] == 1: unique_chars.append(char) return unique_chars # 示例 input_string = "aenabsascd" result = find_unique_characters(input_string) print("仅出现一次的字符:", result) ``` 上述代码会输出字符串中所有仅出现一次的字符[^2]。 #### C++ 实现 如果需要使用 C++ 实现,可以参考以下代码: ```cpp #include <iostream> #include <string> #include <unordered_map> #include <vector> using namespace std; vector<char> findUniqueCharacters(const string& str) { unordered_map<char, int> charCount; for (char c : str) { // 第一次遍历,统计每个字符的出现次数 charCount[c]++; } vector<char> uniqueChars; for (char c : str) { // 第二次遍历,找出仅出现一次的字符 if (charCount[c] == 1) { uniqueChars.push_back(c); } } return uniqueChars; } int main() { string inputString = "aenabsascd"; vector<char> result = findUniqueCharacters(inputString); cout << "仅出现一次的字符: "; for (char c : result) { cout << c << " "; } cout << endl; return 0; } ``` 上述代码同样会输出字符串中所有仅出现一次的字符[^4]。 ### 注意事项 - 如果字符串包含非 ASCII 字符(如中文字符),确保使用的数据结构能够正确处理 Unicode 编码。 - 如果只需要找到第一个仅出现一次的字符,可以在第二次遍历时直接返回找到的第一个符合条件的字符
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值