持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第8天,点击查看活动详情
1.描述
给定一种规律 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 中每个单词都被 单个空格 分隔
2.分析
将字符串按照空格分割为单词数组
如果单词数组和匹配串的长度不一致,返回 false
用一个map来存储字符和单词之间的映射关系,以单词作为key,字符作为value
遍历单词数组和匹配串中的字符
如果映射中不存在当前字符串这个key,且不存在当前匹配串中对应的字符这个value,
则向map中添加映射,若不存在key但存在value,则返回false
如果映射中存在当前字符串这个key但是提取出的value和当前匹配串对应字符不一致,
则返回fasle
如果中间不出现意外,返回true即可
3.AC代码
class Solution {
public boolean wordPattern(String pattern, String s) {
Map<String, Character> map = new HashMap<>();
String[] temp = s.split(" ");
if(pattern.length() != temp.length)
return false;
for(int i = 0; i < temp.length; i++) {
if(!map.containsKey(temp[i])){
if(map.containsValue(pattern.charAt(i)))
return false;
else
map.put(temp[i], pattern.charAt(i));
}else if(pattern.charAt(i) != map.get(temp[i]))
return false;
}
return true;
}
}