对于类似26个字母问题,由于固定长度,所以可以用数组代替哈希表进行设计
首先是hash表的处理方式
class Solution {
public boolean isAnagram(String s, String t) {
Map<Character,Integer> map = new HashMap<>();
int lens = s.length();
int lent = t.length();
for(int i = 0;i<lens;i++){
map.put(s.charAt(i),map.getOrDefault(s.charAt(i),0)+1);
}
for(int i = 0;i<lent;i++){
if(!map.containsKey(t.charAt(i))){
return false;
}
else{
map.put(t.charAt(i),map.get(t.charAt(i))-1);
}
}
for(Character i:map.keySet()){
if(map.get(i)!=0){
return false;
}
}
return true;
}
}
接下来是数组的方式,很简单直接上代码
class Solution {
public boolean isAnagram(String s, String t) {
int[] addarr = new int[26];
for(char i:s.toCharArray()){
addarr[i-'a']+=1;
}
for(char i:t.toCharArray()){
addarr[i-'a']-=1;
}
for (int i:addarr){
if(i!=0)return false;
}
return true;
}
}
同样的方法也出现在383题赎金信当中,这里不再赘述
class Solution {
public boolean canConstruct(String ransomNote, String magazine) {
int[] map = new int[26];
for(char i:ransomNote.toCharArray()){
map[i-'a']+=1;
}
for (char j:magazine.toCharArray()){
map[j-'a']-=1;
}
for(int i:map){
if(i>0){
return false;
}
}
return true;
}
}