字串同構
題目描述:
給定兩個字串 s 和 t ,確定它們是否是同構的。
兩個字串是同構的如果 s 中的字元可以被替換得到 t。
所有出現的字元必須用另乙個字元代替,同時保留字串的順序。 沒有兩個字元可以對映到同乙個字元,但乙個字元可以對映到自己。
注意事項:
你可以假定兩個字串 s 和 t 是一樣長度的.
樣例:給出 s = 「egg」, t= 「add」, 返回 true。
給出 s = 「foo」, t= 「bar」, 返回 false。
給出 s = 「*****」, t= 「title」, 返回 true。
#includeusing namespace std;
bool isisomorphic(string s, string t) {
// write your code here
int lens=s.length();
maphashmap1;
int flag1=0;
for(int i=0;ihashmap2;
int flag2=0;
for(int i=0;ihashmap){//雜湊表的遍歷
map::iterator iter;
for(iter = hashmap.begin(); iter != hashmap.end(); ++iter)
couts>>t;
cout《思路講解:
由於,沒有兩個字元可以對映到同乙個字元,即一對一的對映,所以我就想到了使用雜湊表中的map函式,我們可以使用map將s[i]和t[i]對應的新增到雜湊表中,但每次新增我們需要查詢一下s[i]是否存在於雜湊表中,如果不存在就新增,存在就看s[i]對映的字元是否與t[i]相等,如果不等則說明多個字元對映到同乙個字元上了,故這兩個字元不同構。但是這樣我們只檢查了s[i]到t[i]的對映,只確定了s[i]—->t[i]的唯一性,我們也要確定t[i]—->s[i]的對映是否唯一。只有這兩個相互對映唯一,我們才能說這是同構的。
可能有些人會懷疑是否還需要對t到s的對映的唯一性進行判斷,這裡我給出乙個反例就可以了,例eggs和adda,可以看出s到t的對映的唯一是唯一的,但是這兩個字串卻不是同構的。所以我們還需要對t到s的對映的唯一性進行判斷
舉個例子:
例:egg與add
首先我們將e->a新增進雜湊表,然後查詢g是否存在雜湊表中,不存在就將其g->d新增進雜湊表,然後在判斷g是否存在雜湊表中,存在就將g對映的字元與d比較如果相同就說明s到t對映唯一,反之說明不唯一。然後我們也需要對t到s的對映的唯一性進行判斷。這裡就不一一描述了。
簡單來說,互相新增對映就可以了
同構字串
給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t 那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。示例 1 輸入 s egg t add 輸出 true 示例 2 輸入 s ...
同構字串
給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t 那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身 示例 1 輸入 s egg t add 輸出 true 示例 2 輸入 s ...
同構字串
給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t 那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。示例 1 輸入 s egg t add 輸出 true示例 2 輸入 s f...