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是否遵循相同的指导规律。

京公网安备 11010502036488号