当前位置: 面试刷题>> 字符同构 (经典算法题500道)


### 题目描述补充 题目:**字符同构检测** 给定两个字符串 `s1` 和 `s2`,判断它们是否字符同构。两个字符串字符同构的条件是: - 两个字符串的长度必须相等。 - 可以通过重新排列 `s1` 的字符顺序得到 `s2`,同时也可以通过重新排列 `s2` 的字符顺序得到 `s1`。 - 换句话说,两个字符串包含完全相同的字符集合(包括重复字符),且每个字符在两个字符串中出现的次数相同。 ### 示例 - 输入:`s1 = "egg"`, `s2 = "gee"` - 输出:`true` - 解释:两个字符串长度相等,且都包含字符 'e' 和 'g',每个字符在两个字符串中都出现了两次。 - 输入:`s1 = "foo"`, `s2 = "bar"` - 输出:`false` - 解释:两个字符串包含的字符集合不同。 ### PHP 代码示例 ```php function isIsomorphic(string $s1, string $s2): bool { if (strlen($s1) !== strlen($s2)) { return false; } $map = []; $reverseMap = []; for ($i = 0; $i < strlen($s1); $i++) { $char1 = $s1[$i]; $char2 = $s2[$i]; if (!isset($map[$char1]) && !isset($reverseMap[$char2])) { $map[$char1] = $char2; $reverseMap[$char2] = $char1; } elseif (($map[$char1] ?? null) !== $char2 || ($reverseMap[$char2] ?? null) !== $char1) { return false; } } return true; } // 测试 echo isIsomorphic("egg", "gee") ? "true" : "false"; // 输出 true echo isIsomorphic("foo", "bar") ? "true" : "false"; // 输出 false ``` ### Python 代码示例 ```python def isIsomorphic(s1: str, s2: str) -> bool: if len(s1) != len(s2): return False map_s1_to_s2 = {} map_s2_to_s1 = {} for char1, char2 in zip(s1, s2): if char1 not in map_s1_to_s2: if char2 in map_s2_to_s1.values(): return False map_s1_to_s2[char1] = char2 map_s2_to_s1[char2] = char1 elif map_s1_to_s2[char1] != char2: return False return True # 测试 print(isIsomorphic("egg", "gee")) # 输出 True print(isIsomorphic("foo", "bar")) # 输出 False ``` ### JavaScript 代码示例 ```javascript function isIsomorphic(s1, s2) { if (s1.length !== s2.length) { return false; } const mapS1ToS2 = {}; const mapS2ToS1 = {}; for (let i = 0; i < s1.length; i++) { const char1 = s1[i]; const char2 = s2[i]; if (!(char1 in mapS1ToS2)) { if (mapS2ToS1[char2] !== undefined) { return false; } mapS1ToS2[char1] = char2; mapS2ToS1[char2] = char1; } else if (mapS1ToS2[char1] !== char2) { return false; } } return true; } // 测试 console.log(isIsomorphic("egg", "gee")); // 输出 true console.log(isIsomorphic("foo", "bar")); // 输出 false ``` ### 码小课内容分享 码小课网站中有更多关于算法和数据结构的精彩内容,包括但不限于排序算法、搜索算法、动态规划、图论算法等。通过系统学习这些内容,你将能够提升编程能力,掌握解决复杂问题的技巧。欢迎访问码小课网站,与众多学习者一同成长!
推荐面试题