Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
一、题目描述:
给定一种规律 pattern 和一个字符串 s ,判断 s 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
示例 3:
输入: pattern = "aaaa", str = "dog cat cat dog"
输出: false
提示:
- 1 <= pattern.length <= 300
- pattern 只包含小写英文字母
- 1 <= s.length <= 3000
- s 只包含小写英文字母和 ' '
- s 不包含 任何前导或尾随对空格
- s 中每个单词都被 单个空格 分隔
二、思路分析:
利用Map的特性,使pattern中的每个字符和str分割后的字符串一一对应起来,唯一需要注意的是,当map中不包含key的时候,需要判断一下值是否存在。
三、AC 代码:
class Solution {
public boolean wordPattern(String pattern, String str) {
String[] array = str.split(" ");
if (array.length != pattern.length())
return false;
Map<String, Character> map = new HashMap();
char[] charArray = pattern.toCharArray();
// map里包含key的话比较值是否相等,不包含key的话也要注意查找一下要存入的value是否已经存在了
for (int i = 0; i < array.length; i++) {
if (map.containsKey(array[i])) {
if (!map.get(array[i]).equals(charArray[i])) {
return false;
}
} else {
if (map.containsValue(charArray[i])) {
return false;
} else {
map.put(array[i], charArray[i]);
}
}
}
return true;
}
}
四、总结:
这种找匹配的一般还是哈希表适合。