对于两个字符串A和B,如果A和B中出现的字符种类相同且每种字符出现的次数相同,则A和B互为变形词,请设计一个高效算法,检查两给定串是否互为变形词。
给定两个字符串A和B及他们的长度,请返回一个bool值,代表他们是否互为变形词。
测试样例:
"abc",3,"bca",3
返回:true
import java.util.*;
public class Transform {
public boolean chkTransform(String A, int lena, String B, int lenb) {
if(lena != lenb) return false;
HashMap<String,Integer> map = new HashMap<String, Integer>();
HashMap<String,Integer> mapb = new HashMap<String, Integer>();
char[] a = A.toCharArray();
for(int i = 0 ; i < lena ; i++){
if(map.containsKey(a[i]+"")){
map.put(a[i]+"",map.get(a[i]+"")+1);
}
else{
map.put(a[i]+"",1);
}
}
char[] b = B.toCharArray();
for(int i = 0 ; i < lenb ; i++){
if(mapb.containsKey(b[i]+"")){
mapb.put(b[i]+"",mapb.get(b[i]+"")+1);
}
else{
mapb.put(b[i]+"",1);
}
}
Iterator<Map.Entry<String, Integer>> iter = map.entrySet().iterator();
while(iter.hasNext()){
Map.Entry entry = (Map.Entry) iter.next();
String key = (String) entry.getKey();
System.out.println("key:"+key+";"+" mapa:"+entry.getValue()+" mapb:"+mapb.get(key));
if(!entry.getValue().equals(mapb.get(key)))return false;
}
return true;
}
}