题目描述
给定两个字符串str1和str2,如果str1和str2中出现的字符种类出现的一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请判断str1和str2是否为变形词。
输入描述:
输入包括3行,第一行包含两个整数n,m(1≤n,m≤105)(1 \leq n,m\leq 10^5)(1≤n,m≤105)分别代表str1和str2的长度,第二行和第三行为两个字符串,分别代表str1和str2。
输出描述:
如果str1和str2互为变形词,请输出“true”,否则输出“false”。
示例1
输入
3 3
123
321
输出
true
示例2
输入
3 4
123
2331
输出
false
解法一:哈希表
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
br.readLine();
String s1 = br.readLine().trim();
String s2 = br.readLine().trim();
boolean flag = judge(s1,s2);
System.out.println(flag);
}
public static boolean judge(String s1,String s2){
if(s1==null||s2==null||s1.length()!=s2.length()){
return false;
}
char[] chars1=s1.toCharArray();
char[] chars2=s2.toCharArray();
int [] map=new int[256];
for(int i=0;i<chars1.length;i++){
map [chars1[i]]++;
}
for(int i=0;i<chars2.length;i++){
map[chars2[i]]--;
if(map[chars2[i]]<0)
return false;
}
return true;
}
}