290. 单词规律
题目:


题解:
java
class Solution {
public boolean wordPattern(String pattern, String s) {
//得到每个单词
List<String> ss = Arrays.asList(s.split(" "));
Map<Character,String> map1 = new HashMap<>();
Map<String,Character> map2 = new HashMap<>();
if(ss.size() != pattern.length()) {
return false;
}
for(int i=0;i<pattern.length();i++) {
Character c = pattern.charAt(i);
//将pattern作为key
//如果在map1中包含c
if(map1.containsKey(c)) {
//如果对应的字符串不是当前的字符串,直接返回false
if(!map1.get(c).equals(ss.get(i))) {
return false;
}
}
//如果不包含,进行映射
else {
map1.put(c,ss.get(i));
}
//将s作为key
//如果在map2中包含c
if(map2.containsKey(ss.get(i))) {
//如果对应的字符串不是当前的字符串,直接返回false
if(!map2.get(ss.get(i)).equals(c)) {
return false;
}
}
//如果不包含,进行映射
else {
map2.put(ss.get(i),c);
}
}
return true;
}
}
242. 有效的字母异位词
题目:

题解一:
java
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {
return false;
}
//分别用来统计s和t的字符串
Map<Character,Integer> map1 = new HashMap<>();
Map<Character,Integer> map2 = new HashMap<>();
for(int i=0;i<s.length();i++) {
Character ss = s.charAt(i);
Character tt = t.charAt(i);
map1.put(ss, map1.getOrDefault(ss, 0)+1);
map2.put(tt, map2.getOrDefault(tt, 0)+1);
}
if(map1.equals(map2)) {
return true;
}
return false;
}
}
题解二:
java
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {
return false;
}
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
//进行排序
Arrays.sort(c1);
Arrays.sort(c2);
String s1 = new String(c1);
String s2 = new String(c2);
//转换成字符串,进行判断是否相等
if(s1.equals(s2)) {
return true;
}
return false;
}
}
在写题解2的时候我一开始是想着直接让c1和c2比较,但是我发现报错,于是就换成转成字符串进行比较,然后完成该题之后就问了ai为什么不行,原因竟然是因为List的==比较还是equals来比较,都比较的是内存地址,就相当于都是==来比较。所以,如果我非要比较c1和c2,就必须用Arrays.equals(c1,c2)来比较。过程如下
java
class Solution {
public boolean isAnagram(String s, String t) {
if(s.length()!=t.length()) {
return false;
}
char[] c1 = s.toCharArray();
char[] c2 = t.toCharArray();
//进行排序
Arrays.sort(c1);
Arrays.sort(c2);
// String s1 = new String(c1);
// String s2 = new String(c2);
//转换成字符串,进行判断是否相等
// if(s1.equals(s2)) {
// return true;
// }
// return false;
if(Arrays.equals(c1,c2)) {
return true;
}
return false;
}
}