题号:no290
题目名:单词规律
原题URL:https://leetcode-cn.com/problems/word-pattern/
题目描述
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例
示例 1:
输入: pattern = "abba", str = "dog cat cat dog"
输出: true
示例 2:
输入:pattern = "abba", str = "dog cat cat fish"
输出: false
限制
- 你可以假设
pattern
只包含小写字母,str
包含了由单个空格分隔的小写字母。
思路
1.散列表可以存储对应的a,b表示的单词
2.再做一个散列表防止一个单词出现多次
3.遍历Pattern可以得到正确答案
解题代码
public class Solution {
public boolean wordPattern(String pattern, String s) {
//pattern里面只有小写字母,所以一个长度为26的数组就可以存下所有
String[] strs = s.split(" ");
String[] hash = new String[26];
if(pattern.length()!=strs.length) return false;
Map<String,Integer> isStore = new HashMap<>();
for (int i = 0; i < pattern.length(); i++) {
char c = pattern.charAt(i);
//如果当前位置没存字符,可以存,但是不能存已经存过的字符
if(hash[c-'a']==null) {
hash[c-'a'] = strs[i];
Integer integer = isStore.get(strs[i]);
if(integer==null) isStore.put(strs[i],1);
else return false;
}else {
//如果存了字符串并且和当前字符串不想等,返回false
if(!strs[i].equals(hash[c-'a'])) return false;
}
}
return true;
}
}