当前位置:实例文章 » JAVA Web实例» [文章]【哈希表/字符串-简单】LeetCode 205 同构字符串 Java

【哈希表/字符串-简单】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;
 }

 Map map = 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`,表示两个字符串是同构的。

其他信息

其他资源

Top