题解 | #牛群智能指导系统#
牛群智能指导系统
https://www.nowcoder.com/practice/94e01098fe8f4941ba90fb64ab2d7025
知识点:哈希表
思路:
- 首先,通过将
plan
字符串按空格分割为字符串数组a
,然后比较数组a
的长度是否与字符串s
的长度相等,如果不相等,则返回false
,因为每个字符需要对应一个规划字符串。 - 创建一个哈希表
d
,用于存储字符与规划字符串之间的映射关系,以及一个集合seen
,用于检查规划字符串是否重复出现。 - 遍历字符串数组
a
,同时遍历字符串s
中的每个字符:如果字符 s[i] 已经在 d 中存在映射关系,检查当前规划字符串是否与 d[s[i]] 相等,如果不相等,则返回 false,否则继续下一个字符的比较。如果字符 s[i] 在 d 中不存在映射关系,检查当前规划字符串是否已经在 seen 集合中出现过,如果是,则返回 false,否则将当前字符映射到规划字符串,并将规划字符串添加到 seen 中。 - 如果遍历完成后没有出现不相等或重复映射的情况,则返回
true
,表示字符串s
和规划字符串plan
是有效的模式。
编程语言:java
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pattern string字符串 * @param plan string字符串 * @return bool布尔型 */ public static boolean isValidPattern(String s, String plan) { String[] a = plan.split(" "); if (a.length != s.length()) return false; Map<Character, String> d = new HashMap<>(); Set<String> seen = new HashSet<>(); for (int i = 0; i < a.length; i++) { if (d.containsKey(s.charAt(i))) { if (!d.get(s.charAt(i)).equals(a[i])) return false; continue; } if (seen.contains(a[i])) return false; seen.add(a[i]); d.put(s.charAt(i), a[i]); } return true; } }