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 inpattern
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) {
String[] words = str.split(" ");
if (words.length != pattern.length())
return false;
Map index = new HashMap();//map是个接口,实现需要hashmap以及treemap等
for (Integer i=0; i<words.length; ++i)//这儿写成Integer i=0就对了,写成int i=0就出错了
if (index.put(pattern.charAt(i), i)!=index.put(words[i], i))//put的返回值是return the previous value associated with key
return false;
return true;
}
}
如果想要用Int则可以写成这样
for (int i=0; i<words.length; ++i)
if (!Objects.equals(index.put(pattern.charAt(i), i),index.put(words[i], i)))
return false;
==是判断两个变量或实例是不是指向同一个内存空间
equals是判断两个变量或实例所指向的内存空间的值是不是相同
除了String和封装器,equals()和“==”没什么区别
但String和封装器重写了equals(),所以在这里面,equals()指比较字符串或封装对象对应的原始值是否相等,"=="是比较两个对象是否为同一个对象
==是判断两个对象是否是同一个对象
equals是进行值的判断
String a = new String("aaa");
String b = new String("a");
b += "aa";
则 a==b //错误
a.equals(b)//正确
public class Solution {
public boolean wordPattern(String pattern, String str) {
String[] strs = str.split(" ");
HashMap<String, Integer> mapstr = new HashMap<String, Integer>();
HashMap<Character, Integer> mapc = new HashMap<Character, Integer>();
if(pattern.length() != strs.length) return false;
for(Integer i= 0;i < pattern.length();++i){
char tmpc = pattern.charAt(i);
String tmpstr = strs[i];//下一行的异或操作,不仅可以针对数字还可以针对逻辑
if((mapc.containsKey(tmpc) ^ mapstr.containsKey(tmpstr))
||(mapc.containsKey(tmpc) && mapstr.containsKey(tmpstr) && mapc.get(tmpc) != mapstr.get(tmpstr)))
return false;
mapc.put(tmpc, i);//这个写法很巧妙的,算是变相的实现了上边的Put对比的那种写法
mapstr.put(tmpstr, i);//注意一定要把这两句Put放在if语句的后边,如果放在前边那完全就坏了
}
return true;
}
}