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(" "); if (pattern.length() != words.length) { return false; } Map<Character, String> patternMap = new HashMap<>(); Set<String> usedWords = new HashSet<>(); for (int i = 0; i < pattern.length(); i++) { char c = pattern.charAt(i); String word = words[i]; if (patternMap.containsKey(c)) { if (!patternMap.get(c).equals(word)) { return false; } } else { if (usedWords.contains(word)) { return false; } patternMap.put(c, word); usedWords.add(word); } } return true; } }
Java代码
该题考察的知识点是字符串处理和哈希表的应用。
使用哈希表来建立pattern中每个字符与plan中每个单词之间的映射关系。遍历pattern中的每个字符和plan中的每个单词,对于每个字符和单词,我们检查它们是否满足指导规律的要求。
使用split函数将plan字符串拆分为单词数组words。然后,我们检查pattern和words的长度是否相等,如果不相等则直接返回false
初始化一个空的哈希表 patternMap
来存储pattern中每个字符与对应的单词之间的映射关系。同时,我们还使用一个集合 usedWords
来记录已经被使用过的单词。
遍历pattern中的每个字符和words中的每个单词,进行以下操作:
- 如果字符c在
patternMap
中已经存在,我们检查它是否与当前的单词word相匹配。如果不匹配,则说明不满足指导规律,返回false。 - 否则,我们将字符c和单词word添加到
patternMap
中,并将word添加到usedWords
集合中。
在添加映射关系之前,我们还需要检查单词word是否已经被使用过。如果是,则说明存在多个字符对应同一个单词的情况,返回false。
如果以上步骤都通过了,说明plan遵循相同的指导规律,返回true。
最终返回值是一个布尔值,表示plan是否遵循相同的指导规律。