題目描述:在乙個字串中找出第乙個只出現一次的字元,如輸入」abaccdeff」,輸出』b』.
解題思路:
用陣列建立乙個簡單的雜湊表來儲存每乙個字元出現的次數,再次遍歷字串,並用o(1)的時間判斷該字元是否只出現了一次
#include
#include
using
namespace
std;
char firstnotrepeatingchar(char *pstring)
//while(*pstring!='\0')//此時pstring已指向尾部
for(int i=0;ichar ch=pstring[i];
if(hashtable[ch]==1)
return ch;
}return
'\0';
}int main()
; char ch;
for(size_t i=0;iif(!hashtable[ch])
hashtable[ch]=1;
}for(size_t i=0;iif(!hashtable[ch])
result.push_back(ch);
}return result;
}string deletechar2(const
string &s1,const
string &s2)
return result;
}int main()
; char ch;
for(string::size_type i=0;iif(!hashtable[ch])
}}int main()
應用4:變位詞判斷
在英語中,如果兩個單詞中出現的字母相同,並且每個字母出現的次數也相同,那麼這兩個單詞互為變為詞(anagram),例如silent和listen,evil和live等為變位詞
解題思路:
建立乙個陣列實現的簡單雜湊表,用來統計字串出現的次數,當掃瞄到第乙個字串中的每一字元時,為雜湊表對應的項的值加1,接下來掃瞄第二個字串,掃瞄到每個字串時,為雜湊表中對應的項的值減1,如果掃瞄第二個字串後,雜湊表中所有的值都為0,那麼這兩個字串就互為變為詞
#include
#include
using
namespace
std;
bool anagram(const
string &s1,const
string &s2)
; char ch;
for(string::size_type i=0;ifor(string::size_type i=0;ifor(int j=0;j<256;j++)
if(hashtable[j] != 0)
return
false;
return
true;
}int main()
資料結構之雜湊表(雜湊表)
今天學的是資料結構的雜湊查詢篇,其他的查詢可參見以前的傳送門 以前的查詢都是基於比較關鍵字的基礎上,所以查詢的效率依賴於查詢過程中所進行的比較次數。理想的情況是不經過任何比較,通過計算就能直接得到記錄所在的儲存位址,雜湊查詢 hashed search 是基於上述思想的一種查詢方式。雜湊法又稱為雜湊...
資料結構之雜湊表的實現
之前研究stl原始碼的時候發現雜湊table底層是實現看起來實現的非常的簡潔,覺得自己去寫乙個雜湊表肯定也是很簡單的。但是,但是,但是我今天看了一下資料結構裡面的雜湊表的簡單實現,才發現其實也是有很多學問在裡面的,所以今天就打算自己實現一下,做乙個記錄,方便以後自己來檢視學習。因為雜湊表是會產生雜湊...
資料結構之雜湊表
雜湊表和雜湊化有乙個重要的概念是如何把關鍵字轉換成陣列下標,在雜湊表中這個轉換是通過雜湊函式來完成的。比如規定乙個單詞含有4個字元,對於單詞cats,我們採用 冪的連乘 的方式將乙個單詞對映成數字。因為有27個可能的字元,包括空格,所以冪採用27,則cats的數字下標是3 27 3 1 27 2 2...