290. 单词规律
2020-05-21 本文已影响0人
放下梧菲
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, 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
示例 4:
输入: pattern = "abba", str = "dog dog dog dog"
输出: false
说明:
你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。
本题其实不算什么难题,我也没用用什么巧妙的办法,就是建立两个哈希表,每次遍历到一个单词和一个字母,就建立双方的映射关系,当遍历到已经存在映射关系但是不相等的时候就是false,此外本题要注意,字母可能比字符串少,或者字符串比字母少,需要做额外判断。
代码如下:
class Solution {
public boolean wordPattern(String pattern, String str) {
HashMap <Character,String> map1 = new HashMap<>();
HashMap <String,Character> map2 = new HashMap<>();
int j = 0;
for (int i = 0; i < pattern.length(); i++){
char ch = pattern.charAt(i);
int temp = j;
while (j < str.length() && str.charAt(j) != ' ') j++;
if (temp == j) return false;
String s = str.substring(temp,j);
if (map1.containsKey(ch)){
if ( !s.equals(map1.get(ch))){
return false;
}
}
if (map2.containsKey(s)){
if ( ch != map2.get(s)){
return false;
}
}
map1.put(ch,s);
map2.put(s,ch);
j++;
}
if (j >= str.length())
return true;
else
return false;
}
}
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/word-pattern
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。