問題描述
查詢乙個字串中第乙個只出現兩次的字元。例如:「abcdefabcdefabc」中第乙個只出現兩次的為「d」,要求時間複雜度為o(1),空間複雜度為o(1)
解決思路
1、建立乙個hash表,用來儲存每乙個字元出現的次數,即乙個字元的大小:256(無符號型別)
2、對hash表中的每乙個的字元進行初始化
3、儲存陣列中每個字元出現的次數,將其儲存在hash表中
4、從陣列的起始開始,遍歷陣列,找到第乙個次數為2次的字元,從而返回這個字元,如果沒有找到,則返回null即可
如下所示:
**如下所示:
方法一
char firstcomesecondchar1(char*array, size_t size)
; memset(str, '0', 256);
//統計每個字元出現的次數
for (int i = 0; i < size; ++i)
for (int j = 0; j < 256; ++j)
}//走出來,還沒有找到,則證明沒有這個字元
return
'\0';
}
優點:在儲存每個字元的次數較為方便
缺點:在查詢出現兩次的字元上,迴圈次數太多,從而導致效率較低
方法二
char firstcomesecondchar(char*array, size_t size)
; memset(str, '0', 256);
char*str2 = array;
//統計每個字元出現的次數
for (int i = 0; i < size; ++i)
str2 = array;//再一次更新指標的位置,讓其重新指向開始
for (int j = 0; j < size; ++j)
str2++;
}//走出來,還沒有找到,則證明沒有這個字元
return
'\0';
}
缺點:需要開闢新的字元,從而用來每次指向字串的開始
優點:在查詢出現兩次的字元上比較方便
測試**如下所示:
int main()
結果如下所示:
只有不停的奔跑,才能不停留在原地!!!
查詢乙個字串中第乙個只出現兩次的字元。
題目 查詢乙個字串中第乙個只出現兩次的字元。比如 abcdefabcdefabc 中第乙個只出現兩次為 d 要求時間複雜度為o n 空間複雜度為o 1 由於本體的特殊性,我們可以定義乙個非常簡單的雜湊表。字元 char 是乙個長度為8的資料型別,因此總共有256中可能。於是我們建立乙個長度為256的...
查詢乙個字串中第乙個只出現兩次的字元
題目 查詢乙個字串中第乙個只出現兩次的字元。比如 abcdefabcdefabc 中第乙個只出現兩次為 d 要求時間複雜度為o n 空間複雜度為o 1 思路 建立乙個輔助陣列 大小為256 陣列的下標表示字元的ascii碼,遍歷字串,每出現乙個,在對應位置加一,最後遍歷陣列就可以找到第乙個出現兩次的...
尋找乙個字串中第乙個只出現兩次的字元
2.附加題 查詢乙個字串中第乙個只出現兩次的字元。比如 abcdefabcdefabc 中第乙個只出現兩次為 d 要求時間複雜度為o n 空間複雜度為o 1 解法 利用雜湊表 由於ascii表中一共存在256個字元 所以開闢乙個256大小整型陣列 將這個陣列看做雜湊表,將字元的ascii值當做key...