LeetCode-205-同构字符串

题目

给定两个字符串 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

提示:

  • 1 <= s.length <= 5 * 104
  • t.length == s.length
  • st 由任意有效的 ASCII 字符组成

题解

这一题的其实不难,一开始想歪了。

其实就是一个字母映射到另一个字母,不用考虑怎么映射的,只要遇到a变成b即可。

这里需要考虑的是双向映射,只考虑单向会有问题。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class Solution {
public boolean isIsomorphic(String s, String t) {
Map<Character, Character> s2t = new HashMap<>(), t2s = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char a = s.charAt(i), b = t.charAt(i);
// 对于已有映射 a -> s2t[a],若和当前字符映射 a -> b 不匹配,
// 说明有一对多的映射关系,则返回 false ;
// 对于映射 b -> a 也同理
if (s2t.containsKey(a) && s2t.get(a) != b ||
t2s.containsKey(b) && t2s.get(b) != a)
return false;
s2t.put(a, b);
t2s.put(b, a);
}
return true;
}
}

LeetCode-205-同构字符串
https://excelius.xyz/leetcode-205-同构字符串/
作者
Ther
发布于
2024年7月8日
许可协议