Java 题解 | #牛群智能指导系统#
牛群智能指导系统
https://www.nowcoder.com/practice/94e01098fe8f4941ba90fb64ab2d7025
import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param pattern string字符串 * @param plan string字符串 * @return bool布尔型 */ public boolean isValidPattern (String pattern, String plan) { // write code here // 将管理策略按空格分割为单词数组 String[] words = plan.split(" "); // 如果单词数量与指导规律不匹配,则返回 false if (words.length != pattern.length()) { return false; } // 使用哈希表保存指导规律的字符与管理策略的单词的映射关系 Map<Character, String> map = new HashMap<>(); // 使用集合保存已经出现过的单词 Set<String> seen = new HashSet<>(); // 遍历指导规律和管理策略的每个字符/单词 for (int i = 0; i < pattern.length(); i++) { char c = pattern.charAt(i); String word = words[i]; // 如果当前字符 c 还没有与单词建立映射关系 if (!map.containsKey(c)) { // 如果当前单词已经在集合 seen 中出现过,返回 false if (seen.contains(word)) { return false; } // 将字符 c 与单词 word 建立映射关系 map.put(c, word); // 将单词 word 添加到集合 seen 中 seen.add(word); } // 如果当前字符 c 已经与单词建立过映射关系 else { // 如果映射结果不等于当前单词,返回 false if (!map.get(c).equals(word)) { return false; } } } // 遍历结束后,返回 true return true; } }
Java代码。
该题考察的知识点是字符串处理和映射关系的建立。
- 字符串分割
- 哈希表的使用:哈希表是一种常用的数据结构,用于建立键值对之间的映射关系。在本题中,我们使用哈希表来存储指导规律的字符与管理策略的单词之间的对应关系。
文字解释如下:
通过将管理策略 plan
按空格分割为单词数组,然后逐个遍历指导规律 pattern
和管理策略的每个字符/单词来建立映射关系,并判断是否满足指导规律。具体步骤如下:
- 分割管理策略
plan
,得到单词数组words
。 - 如果单词数量与指导规律
pattern
的字符数量不相等,返回 false。 - 建立空的哈希表
map
和空的集合seen
。 - 遍历指导规律
pattern
的每个字符和单词数组words
的对应位置上的单词:如果当前字符 c 还没有与单词建立映射关系:如果当前单词已经出现过(在集合 seen 中),返回 false。否则,将字符 c 与当前单词建立映射关系,并将当前单词添加到集合 seen 中。如果当前字符 c 已经与单词建立过映射关系,并且映射结果不等于当前单词,返回 false。 - 遍历结束后,如果没有发现不匹配的情况,则返回 true。