提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
前言
leetcode 242 有效的字母异味词
一、解题思路
使用两个HashMap分别存储每个字符串对应的字符和字符出现次数,然后判断两个哈希表是否相等即可。
这里的代码写的比较复杂,因为加入了一些哈希表基本操作和对哈希表的排序操作
二、代码
package Hash;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Scanner;
public class _242有效的字母异味词 {
public static boolean isAnagram(String s, String t) {
HashMap<Character,Integer> maps=new HashMap<Character,Integer>();
HashMap<Character,Integer> mapt=new HashMap<Character,Integer>();
for(int i=0;i<s.length();i++) {
maps.put(s.charAt(i),maps.getOrDefault(s.charAt(i), 0)+1);
}
for(int i=0;i<t.length();i++) {
mapt.put(t.charAt(i),mapt.getOrDefault(t.charAt(i), 0)+1);
}
/* //输出结果
for(Map.Entry<Character, Integer> map_1:maps.entrySet()) {
System.out.println("key= "+map_1.getKey()+" value "+map_1.getValue());
}
System.out.println("*****");
for(Map.Entry<Character, Integer> map_2:mapt.entrySet()) {
System.out.println("key= "+map_2.getKey()+" value "+map_2.getValue());
}*/
List<Map.Entry<Character, Integer>> lists=new ArrayList<Map.Entry<Character, Integer>>(maps.entrySet());
Collections.sort(lists,new Comparator<Map.Entry<Character, Integer>>(){
@Override
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
// TODO Auto-generated method stub
return o1.getValue().compareTo(o2.getValue());
}
});
List<Map.Entry<Character, Integer>> listt=new ArrayList<Map.Entry<Character, Integer>>(mapt.entrySet());
Collections.sort(listt,new Comparator<Map.Entry<Character, Integer>>(){
@Override
public int compare(Entry<Character, Integer> o1, Entry<Character, Integer> o2) {
// TODO Auto-generated method stub
return o1.getValue().compareTo(o2.getValue());
}
});
//输出排序后的结果
/*System.out.println("***sort***");
for (Map.Entry<Character, Integer> map_s:lists) {
System.out.println(map_s.getKey()+" "+map_s.getValue());
}
for (Map.Entry<Character, Integer> map_t:listt) {
System.out.println(map_t.getKey()+" "+map_t.getValue());
}*/
if( maps.equals(mapt))return true;
return false;
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
String s=sc.next();
String t=sc.next();
System.out.println(isAnagram(s,t));
}
}
}
总结
快速查找一个元素是否存在一个集合中,首选哈希表