题解 | #农场智能分类系统#
农场智能分类系统
https://www.nowcoder.com/practice/a2c9a3fce4f141a3956fe67cd00cc3e2
知识点:哈希表
思路:
- 首先,通过比较两个字符串的长度,如果不相等,则返回"NO",因为两个字符串的映射关系必须是一一对应的。
- 创建一个哈希表
mp
,用于存储字符映射关系,以及一个集合seen
,用于检查目标字符串中的字符是否已经被映射过。 - 遍历字符串
s
中的每个字符:如果 mp 中已经存在 s[i] 的映射关系,检查当前字符是否与目标字符串 t 中对应位置的字符相等,如果不相等,则返回"NO",否则继续下一个字符的比较。如果 mp 中不存在 s[i] 的映射关系,检查目标字符串 t 中对应位置的字符是否已经被映射过,如果是,则返回"NO",否则将当前字符映射到目标字符串中的字符,并将目标字符串中的字符添加到 seen 中。 - 如果遍历完成后没有出现不相等或重复映射的情况,则返回"YES"。
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param s string字符串 * @param t string字符串 * @return string字符串 */ public static String isIsomorphic(String s, String t) { int n = s.length(); int m = t.length(); if (m != n) return "NO"; HashMap<Character, Character> mp = new HashMap<>(); HashSet<Character> seen = new HashSet<>(); for (int i = 0; i < n; i++) { if (mp.containsKey(s.charAt(i))) { if (mp.get(s.charAt(i)) != t.charAt(i)) return "NO"; continue; } if (seen.contains(t.charAt(i))) return "NO"; mp.put(s.charAt(i), t.charAt(i)); seen.add(t.charAt(i)); } return "YES"; } }