题解 | #牛群智能指导系统#

牛群智能指导系统

https://www.nowcoder.com/practice/94e01098fe8f4941ba90fb64ab2d7025

知识点:哈希表

思路:

  1. 首先,通过将 plan 字符串按空格分割为字符串数组 a,然后比较数组 a 的长度是否与字符串 s 的长度相等,如果不相等,则返回 false,因为每个字符需要对应一个规划字符串。
  2. 创建一个哈希表 d,用于存储字符与规划字符串之间的映射关系,以及一个集合 seen,用于检查规划字符串是否重复出现。
  3. 遍历字符串数组 a,同时遍历字符串 s 中的每个字符:如果字符 s[i] 已经在 d 中存在映射关系,检查当前规划字符串是否与 d[s[i]] 相等,如果不相等,则返回 false,否则继续下一个字符的比较。如果字符 s[i] 在 d 中不存在映射关系,检查当前规划字符串是否已经在 seen 集合中出现过,如果是,则返回 false,否则将当前字符映射到规划字符串,并将规划字符串添加到 seen 中。
  4. 如果遍历完成后没有出现不相等或重复映射的情况,则返回 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;
    }
}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务