原题网址:https://leetcode.com/problems/word-pattern/
Given a pattern
and a string str
, find if str
follows the same pattern.
Here follow means a full match, such that there is a bijection between a letter in pattern
and a non-empty word in str
.
Examples:
- pattern =
"abba"
, str ="dog cat cat dog"
should return true. - pattern =
"abba"
, str ="dog cat cat fish"
should return false. - pattern =
"aaaa"
, str ="dog cat cat dog"
should return false. - pattern =
"abba"
, str ="dog dog dog dog"
should return false.
Notes:
You may assume pattern
contains only lowercase letters, and str
contains lowercase letters separated by a single space.
方法:对单词和模式分别建立哈希映射,然后比较映射值。
public class Solution {
public boolean wordPattern(String pattern, String str) {
Map<String, Integer> nums = new HashMap<>();
int num = 1;
String[] strs = str.split(" ");
if (strs.length != pattern.length()) return false;
for(int i=0; i<strs.length; i++) {
if (!nums.containsKey(strs[i])) nums.put(strs[i], num++);
}
int[] strnum = new int[strs.length];
for(int i=0; i<strs.length; i++) strnum[i] = nums.get(strs[i]);
num = 1;
int[] letters = new int[26];
for(int i=0; i<pattern.length(); i++) {
int j = pattern.charAt(i)-'a';
if (letters[j] == 0) letters[j] = num ++;
}
int[] patternnum = new int[pattern.length()];
for(int i=0; i<pattern.length(); i++) patternnum[i] = letters[pattern.charAt(i)-'a'];
for(int i=0; i<patternnum.length; i++) {
if (patternnum[i] != strnum[i]) return false;
}
return true;
}
}