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