变形词问题
思路: 两种方法,一种是排序好字符数组的方式再进行对比。第二种是计数排序的方式。
public class 变形词问题 {
/*给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串
这里规定大小写为不同字符,且考虑字符串中的空格
给定一个String stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。
保证两串的长度都小于等于5000.
测试样例:
"Here you are","Are you here"
返回: false */
public boolean checkSam(String stringA, String stringB){
// write code here
int len1 = stringA.length();
int len2 = stringB.length();
if (len1 != len2){
return false;
}
char[] arr1 = stringA.toCharArray();
char[] arr2 = stringB.toCharArray();
Arrays.sort(arr1);
Arrays.sort(arr2);
return Arrays.equals(arr1, arr2);
}
public static boolean checksum(String stringA,String stringB){
int len1 = stringA.length();
int len2 = stringB.length();
int[] flag = new int[256];
for(int i = 0;i<len1;i++){
int c = (int)stringA.charAt(i);
flag[c]++;
}
for(int j = 0;j<len2;j++){
int d = (int)stringB.charAt(j);
if(flag[d]<0){
return false;
}
}
return true;
}
public static void main(String[] args){
String str1 = "hear are you";
String str2 = "are you hear";
System.out.print(checksum(str1,str2));
}
}