import java.util.*;
public class Solution {
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @param t string字符串
* @return string字符串
*/
public String isIsomorphic (String s, String t) {
// write code here
if (s.length() != t.length()) {
return "NO";
}
Map<Character, Character> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char sChar = s.charAt(i);
char tChar = t.charAt(i);
if (map.containsKey(sChar)) {
if (map.get(sChar) != tChar) {
return "NO";
}
} else {
// 检查 tChar 是否已经被映射过,如果是,则说明存在不同字符映射到同一个字符的情况,返回 "NO"
if (map.containsValue(tChar)) {
return "NO";
}
map.put(sChar, tChar);
}
}
return "YES";
}
}
该题考察的知识点是字符串处理和哈希表的应用。
在代码中,我使用哈希表来建立字符的映射关系。遍历两个字符串,对于每个字符,检查它们在哈希表中的映射关系是否满足同构定义的要求。
判断两个字符串的长度是否相等,如果不相等则直接返回 "NO",因为不可能存在一一映射的关系。
初始化一个空的哈希表 map 来存储字符的映射关系。
遍历字符串 s 和 t,对于每个字符,进行以下操作:
- 如果字符 sChar 已经存在于 map 中,检查它是否映射到字符 tChar。如果不是,则说明存在不同的映射关系,返回 "NO"。
- 否则,将 sChar 和 tChar 添加到 map 中。
在添加映射关系之前,还需要检查字符 tChar 是否已经被映射过。如果是,则说明存在不同字符映射到同一个字符上的情况,返回 "NO"。
如果以上步骤都通过了,说明两种分类方式是同构的,返回 "YES"。
最终返回值是一个字符串,表示两种分类方式是否同构。
该算法的时间复杂度为O(n),其中n为字符串的长度。

京公网安备 11010502036488号