205 同构字符串

本文最后更新于:2021年1月16日 晚上

给定两个字符串 st,判断它们是否是同构的。

如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。

每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

示例 1:

1
2
输入:s = "egg", t = "add"
输出:true

示例 2:

1
2
输入:s = "foo", t = "bar"
输出:false

示例 3:

1
2
输入:s = "paper", t = "title"
输出:true

提示:

  • 可以假设 st 长度相同。

Solution

解法同 290 单词规律

  • 建立双向哈希,互相确认
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// @lc code=start
class Solution {
public:
bool isIsomorphic(string s, string t) {
unordered_map<char, char> st;
unordered_map<char, char> ts;
for(int i=0; i<s.size(); ++i){
if(st.find(s[i]) != st.end() && st[s[i]] != t[i])
return false;
if(ts.find(t[i]) != ts.end() && ts[t[i]] != s[i])
return false;
// 互相确认
st[s[i]] = t[i];
ts[t[i]] = s[i];
}
return true;
}
};
// @lc code=end

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!