问题原文https://leetcode-cn.com/problems/word-pattern/description/
public boolean wordPattern(String pattern, String str) {
if(pattern == null && str == null) return true;
if(pattern == null || str == null) return false;
//用数字记录下模式
int[] Ptable = new int[26];//a is 97
StringBuilder l1 = new StringBuilder();
for(int i = 0;i<pattern.length();i++) {
//这里需要注意为什么是97
int tmp = pattern.charAt(i)-97;
//注意为什么加一
if(Ptable[tmp] == 0) Ptable[tmp] = i+1;
l1.append(Ptable[tmp]);
}
int count = 1;
StringBuilder l2 = new StringBuilder();
Map<String,Integer> map = new HashMap<>();
StringBuilder tmp = new StringBuilder();
int current = 0;
while(current<str.length()) {
//如果遇到空格说明上一个单词结束了,两个指针的位置也要变化了
if(str.charAt(current) == ' ') {
if(!map.containsKey(tmp.toString()))map.put(tmp.toString(), count);
l2.append(map.get(tmp.toString()));
current++;
count++;
tmp = new StringBuilder();
}else {
tmp.append(str.charAt(current++));
}
}
//把结尾的单词加进去
if(!map.containsKey(tmp.toString()))map.put(tmp.toString(), count);
l2.append(map.get(tmp.toString()));
System.out.println(l1);
System.out.println(l2);
if(l1.length()!=l2.length()) return false;
for(int i = 0;i<l1.length();i++) {
if(l1.charAt(i) != l2.charAt(i)) return false;
}
return true;
}