290. 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
示例 3:
输入: pattern ="aaaa"
, str ="dog cat cat dog"
输出: false
示例 4:
输入: pattern ="abba"
, str ="dog dog dog dog"
输出: false
说明:
你可以假设 pattern
只包含小写字母, str
包含了由单个空格分隔的小写字母。
- 题目难度:简单。
- 英文网址:290. Word Pattern 。
- 中文网址:290. 单词模式 。
思路分析
求解关键:
参考解答
参考解答1
我的解答: 我的思路:这里有一个小小的坑,就是当测试用例是: String pattern = "abba";String str = "dog dog dog dog"; 的时候,我们须要判断出结果是 false。
public class Solution {
public boolean wordPattern(String pattern, String str) {
boolean wordPattern = false;
int patternLength = pattern.length();
String[] strArray = str.split(" ");
if (patternLength == strArray.length) {
Map<Character, String> map1 = new HashMap<>();
Set<String> uniqueValue = new HashSet<>();
char[] patternArray = pattern.toCharArray();
for (int i = 0; i < patternLength; i++) {
if (map1.containsKey(patternArray[i])) {
if (!map1.get(patternArray[i]).equals(strArray[i])) {
return wordPattern;
}
} else {
if (uniqueValue.contains(strArray[i])) {
return wordPattern;
}
uniqueValue.add(strArray[i]);
map1.put(patternArray[i], strArray[i]);
}
}
wordPattern = true;
}
return wordPattern;
}
public static void main(String[] args) {
Solution solution = new Solution();
String pattern = "abba";
String str = "dog dog dog dog";
boolean wordPattern = solution.wordPattern(pattern, str);
System.out.println(wordPattern);
}
}
本篇文章的地址为 https://liweiwei1419.github.io/leetcode-solution/leetcode-0290-word-pattern ,如果我的题解有错误,或者您有更好的解法,欢迎您告诉我 liweiwei1419@gmail.com 。