給定兩個字串 s 和 t,判斷它們是否是同構的
如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。
所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。
示例 1:
輸入: s =
"egg"
, t =
"add"
輸出:true
示例 2:
輸入: s =
"foo"
, t =
"bar"
輸出:false
示例 3:
輸入: s =
"*****"
, t =
"title"
輸出:true
分析:
同構字串要求滿足兩個字串長度相同;
字串中的字元與另一字串中的字元對應相等,即某一字串中有相同字元,那麼另一字元對應位置字元也相同;
方法一:
使用後map將s字串中的字元與t字串中字元建立key-value對應關係,當出現乙個key值對應多個字串時,則不是同構字串
class
solution
map mp=
newhashmap
();char
cs=s.
tochararray()
;char
ct=t.
tochararray()
;for
(int i=
0;ilength()
;i++
)else}}
return
true;}
}
方法2:
要滿足同構字串,即要滿足兩字串字元一一對應,當字串有重複字元,那麼對應字元對應字串的索引相同,判斷字串中對應位置的索引相同就可以判斷;
很巧妙,有點只可意會不可言傳的意思
class
solution
char
cs = s.
tochararray()
;char
ct= t.
tochararray()
;int len = s.
length()
;for
(int i =
0; i < len; i++)}
return
true;}
}/*思路源自:hao-fei-hao
方法三:
類似於第一種,但是不使用hashmap,僅用陣列實現對應關係,有一定的侷限性,但是思路很好
class
solution
char
cs = s.
tochararray()
;char
ct = t.
tochararray()
;char
map =
newchar
[256];
for(
int i=cs.length-
1;i>=
0;i--)
map[cs[i]
]= map[ct[i]
+128
]= cs[i];}
return
true;}
*/
leetcode 205 同構字串
問題 給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t 那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。示例 1 輸入 s egg t add 輸出 true 示例 2 輸入...
LeetCode 205 同構字串
目錄 問題 解法一 給定兩個字串s和t,判斷它們是否是同構的。如果s中的字元可以被替換得到t,那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。示例 1 輸入 s egg t add 輸出 true 示例 2 輸...
LeetCode 205 同構字串
題目描述 這是一道思路巧妙的題目 給定兩個字串 s 和 t,判斷它們是否是同構的。如果 s 中的字元可以被替換得到 t 那麼這兩個字串是同構的。所有出現的字元都必須用另乙個字元替換,同時保留字元的順序。兩個字元不能對映到同乙個字元上,但字元可以對映自己本身。示例 1 輸入 s egg t add 輸...