题目:在英语中,如果两个单词中出现的字母相同,并且每个字母出现的次数也相同,那么这两个单词互为变位词。例如,silent和listen,evil和live等互为变位词。请完成一个函数,判断输入的两个字符串是不是互为变位词。
解法步骤如下:
(1)新建一个HashMap,对输入的两个字符串进行判断处理;遍历第一个字符串中的每个字符,对应的map值加一。
(2)遍历第二个字符串,扫描到每个字符,map中对应值减一。
(3)对于字符串一中的每个字符,遍历其值,都是0返回true,反之返回false。
import java.util.Map;
import java.util.HashMap;
public class Anagram {
public static void main(String[] args) {
System.out.println(anagram("evil","live"));//true
System.out.println(anagram("listen","silent"));//true
System.out.println(anagram("abc","aaa"));//false
System.out.println(anagram("","live"));//false
}
public static boolean anagram(String str1,String str2){
boolean res=true;
if(str1==null||str1.length()<1||str2==null||str2.length()<1) {
res=false;
}
Map<Character,Integer> map=new HashMap<Character,Integer>();
for(int i=0;i<str1.length();i++) {
if(map.containsKey(str1.charAt(i))) {
int value=map.get(str1.charAt(i));
map.put(str1.charAt(i), value+1);
}else {
map.put(str1.charAt(i), 1);
}
}
for(int i=0;i<str2.length();i++) {
if(map.containsKey(str2.charAt(i))) {
int value=map.get(str2.charAt(i));
map.put(str2.charAt(i), value-1);
}
}
for(int i=0;i<str1.length();i++) {
if(map.get(str1.charAt(i))!=0) {
res=false;
break;
}
}
return res;
}
}