1. 程式人生 > >【每日一題】查詢一個字串中第一個只出現兩次的字元

【每日一題】查詢一個字串中第一個只出現兩次的字元

題目:查詢一個字串中第一個只出現兩次的字元。比如:“abcdefabcdefabc”中第一個只出現兩次為‘d’,要求時間複雜度為O(N),空間複雜度為O(1)

解決方法:可以使用雜湊表統計每個字元出現的次數。因為字元只有256種可能,所以我們可以申請一個256大小的陣列來統計每個字元出現的次數(以空間換時間),統計完後,我們以原陣列的元素值為下表,訪問統計陣列,直到遇到第一個訪問陣列元素值為2的元素,其所在位置的字元即為第一個只出現兩次的字元。

#include <iostream>
#include <string.h>
using namespace std
; void FindFristRepeatTwiceChar(char *str) { if(NULL != str) { int CountChar[256] = {0}; for(int i=0;i<strlen(str);i++) CountChar[str[i]]++; for(int j=0;j<strlen(str);j++) { if(CountChar[str[j]] == 2) { cout
<<"第一次出現兩次的字元是:"<<str[j]<<endl; return ; } if(j == strlen(str)) cout<<"不存在這樣的字元!\n"<<endl; } } return ; } int main() { char str[1000]; cout<<"請輸入字串:"; cin>>str; FindFristRepeatTwiceChar(str); return
0; }

這裡寫圖片描述