字串同構

2021-09-03 02:14:09 字數 1312 閱讀 6773

字串同構

題目描述:

給定兩個字串 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...