Open bitfishxyz opened 5 years ago
首先pattern数组和str数组长度一定要是相同的。
然后我们可以循环一遍,循环的时候记录pattern和str的映射关系。
import java.util.*;
class Solution {
public boolean wordPattern(String pattern, String str) {
// 转化为数组,方便计算
char[] patterns = pattern.toCharArray();
String[] strings = str.split(" ");
// 首先长度肯定是要相等的
if (patterns.length != strings.length) {
return false;
}
// 记录pattern和str的对应关系
Map<Character, String> relation = new HashMap<>();
// 循环一遍,判断是否满足规则
for (int i = 0; i < patterns.length; i++) {
char currentPattern = patterns[i];
String currentString = strings[i];
// 说明当前的pattern没有被用过
if (relation.get(currentPattern) == null) {
// 说明当前字符串被用过了,无法建立对应关系,直接返回false
if (relation.values().contains(currentString)){
return false;
} else {
// 说明这里没问题,我们可以记录下二者的对应关系
relation.put(currentPattern, currentString);
}
// 说明这个pattern已经被建立对应关系了
} else {
// 这时我们就要判断当前对应关系是否成立了
if (!relation.get(currentPattern).equals(currentString)){
return false;
}
}
}
// 如果上面没有问题,就返回true
return true;
}
}
给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。
这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。
示例1:
示例 2:
示例 3:
示例 4:
说明: 你可以假设 pattern 只包含小写字母, str 包含了由单个空格分隔的小写字母。