Algorithms first
同构字符串 · 交互式算法学习
判断两个字符串的字符映射结构是否一致。
#205 · 哈希表
同构字符串
Isomorphic Strings
s = "egg", t = "add"线性序列3 个关键状态
步骤 1建立 e↔a。
e→a,a→ee→a
0g→d
1g→d
2推荐
双向映射
时间
O(n)空间 O(字符集)同时维护 s→t 与 t→s,保证一对一。
1function isIsomorphic(s, t) {2 const a = new Map(),3 b = new Map();4 for (let i = 0; i < s.length; i++) {5 if ((a.has(s[i]) && a.get(s[i]) !== t[i]) || (b.has(t[i]) && b.get(t[i]) !== s[i])) return false;6 a.set(s[i], t[i]);7 b.set(t[i], s[i]);8 }9 return true;10}多语言参考
来源 · CC BY-SA 4.0 ↗Java · C++ · Go
这是一组同题正确实现,独立于上方当前动画方法;不同语言可能采用另一种正确策略。
1class Solution {2 public boolean isIsomorphic(String s, String t) {3 Map<Character, Character> d1 = new HashMap<>();4 Map<Character, Character> d2 = new HashMap<>();5 int n = s.length();6 for (int i = 0; i < n; ++i) {7 char a = s.charAt(i), b = t.charAt(i);8 if (d1.containsKey(a) && d1.get(a) != b) {9 return false;10 }11 if (d2.containsKey(b) && d2.get(b) != a) {12 return false;13 }14 d1.put(a, b);15 d2.put(b, a);16 }17 return true;18 }19}交互式算法学习
从执行步骤真正理解 LeetCode 经典 150
本站整理 150 道高频算法面试题和 302 种解法。动画方法同步展示 JavaScript 与 Python;每题另提供 Java、C++ 与 Go 同题参考实现。
AlgoViz Lab
同构字符串 · 解法对比
判断两个字符串的字符映射结构是否一致。
- 测试用例
s = "egg", t = "add"- 题目分类
- 哈希表
- 解法对比
- 2
替换成首次位置模式
每个字符转换为其首次出现下标,比较两个模式。
- 时间
O(n²)- 空间
O(n)
双向映射
同时维护 s→t 与 t→s,保证一对一。
- 时间
O(n)- 空间
O(字符集)