题解 | #农场智能分类系统# java
农场智能分类系统
https://www.nowcoder.com/practice/a2c9a3fce4f141a3956fe67cd00cc3e2
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为字符串的长度。