【哈希表/字符串-简单】LeetCode 205 同构字符串 Java
发布人:shili8
发布时间:2024-11-16 20:51
阅读次数:0
**同构字符串**
### 题目描述给定两个字符串 `s1` 和 `s2`,如果它们的字符序列相同,但可能有不同的字符排列,则称这两个字符串是 **同构** 的。例如, `"egg","add"` 是同构的,因为它们可以通过重新排列 `a` 和 `e` 来得到相同的顺序。
请你判断 `s1` 和 `s2` 是否是同构的。如果是,则返回 `true`;否则,返回 `false`。
### 示例* 输入:`s1 = "egg", s2 = "add"`
输出:`true`
* 输入:`s1 = "foo", s2 = "bar"`输出:`false`
### 解决方案我们可以使用哈希表来解决这个问题。具体来说,我们可以将 `s1` 的每个字符映射到一个哈希值上,然后检查 `s2` 中的字符是否也能被映射到相同的哈希值。
#### Java代码示例
javaimport java.util.HashMap; import java.util.Map; public class Solution { public boolean isIsomorphic(String s1, String s2) { // 如果两个字符串长度不相等,则直接返回 false,因为它们不能是同构的。 if (s1.length() != s2.length()) { return false; } Mapmap = new HashMap<>(); for (int i =0; i < s1.length(); i++) { char c1 = s1.charAt(i); char c2 = s2.charAt(i); // 如果哈希表中已经存在 `c1` 的映射,则检查该映射是否等于 `c2`。 if (map.containsKey(c1)) { if (map.get(c1) != c2) { return false; } } else { // 如果哈希表中不存在 `c1` 的映射,则将其添加到哈希表中,并将 `c2` 作为其值。 map.put(c1, c2); } } // 如果我们能够遍历整个字符串并检查所有字符的映射,则返回 true,表示两个字符串是同构的。 return true; } }
####代码注释* 我们首先检查 `s1` 和 `s2` 的长度是否相等。如果不相等,我们直接返回 `false`,因为它们不能是同构的。
* 然后,我们创建一个哈希表 `map` 来存储 `s1` 中每个字符的映射。
* 我们遍历整个字符串,并检查每个字符的映射。对于已经存在于哈希表中的字符,我们检查其映射是否等于当前字符。如果不相等,我们直接返回 `false`。
* 如果一个字符的映射不存在,我们将其添加到哈希表中,并将当前字符作为其值。
* 如果我们能够遍历整个字符串并检查所有字符的映射,则返回 `true`,表示两个字符串是同构的。
#### 测试用例* 输入:`s1 = "egg", s2 = "add"`
输出:`true`
* 输入:`s1 = "foo", s2 = "bar"`输出:`false`
### 总结本题要求我们判断两个字符串是否是同构的。我们可以使用哈希表来解决这个问题,通过将 `s1` 的每个字符映射到一个哈希值上,然后检查 `s2` 中的字符是否也能被映射到相同的哈希值。如果我们能够遍历整个字符串并检查所有字符的映射,则返回 `true`,表示两个字符串是同构的。