第一次出現一次的字元

2021-08-14 16:57:47 字數 735 閱讀 4557

題目:在字串中找出第乙個出現一次的字元。如輸入"abaccdeff",則輸出'b'。

分析:最直觀的解法從頭掃瞄這個字串中的每乙個字元。當訪問到某個字元的時候拿這個字元和後面的字元相比較,如果在後面沒有發現重複的字元,那該字元就是只出現一次的字元。如果字串有n個字元,每乙個字元可能與後面的o(n)個字元比較,一次這種思路的時間複雜度是o(n^2)。

另外一種解法就是使用雜湊表,實現雜湊表,字元是乙個長度為8的資料結構型別,我們使用乙個大小為256的陣列來實現雜湊表。第一次掃瞄的時候,在雜湊表中更新乙個字元的時間是o(1),如果字串的長度為n,那麼第一次掃瞄的時間複雜度為o(n)。第二次掃瞄的時候,同樣o(1)能讀出乙個字元出現的次數,所以時間複雜度仍然是o(n)。總的時間複雜度就是o(n)。同時,我們需要乙個包含256個字元的陣列,陣列大小為常數,因此可以認為這種演算法的空間複雜度是o(1)。

測試用例:

功能測試(字串中存在只出現一次的字元,不存在只出現一次的字元,字串中的所有字元都只出現一次)

特殊輸入測試(字串為null指標)

**如下:

char firstnotrepeatingchar(char* pstring)

{ if(pstring==null)

return '\0';

const int tablesize=256;

unsigned int hashtable[tablesize];

for(unsigned int i=0;i

第一次只出現一次的字元

include include includechar firstnotrepeatingchar char pstring if pstring null return 0 const int tablesize 256 unsigned int hashtable tablesize for u...

第一次只出現一次的字元

在字串中找出第乙個只出現一次的字元。如輸 abaccdeff 則輸出 b include string include map include iostream using namespace std 法1 用map o nlogn char firstnotrepeatedchar0 char s...

第一次只出現一次的字元

題目劍指offer50 第一次只出現一次的字元 在乙個字串 0 字串長度 10000,全部由字母組成 中找到第乙個只出現一次的字元,並返回它的位置,如果沒有則返回 1 需要區分大小寫 總結 方法一 基於linkedhashmap的方法 由於題目與字元出現的次數有關,所以可以想到用乙個容器統計每個字元...