【每日一題】查詢一個字串中第一個只出現兩次的字元
阿新 • • 發佈:2019-02-02
題目:查詢一個字串中第一個只出現兩次的字元。比如:“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;
}