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