题目:
变形词;两个串有相同的字符及数量组成abc abc ,abc cba, aabcd bcada;
给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。这里规定大小写为不同字符,旦考虑字符串中的空格。
给定一个string stringA和一个string stringB,请返回一个bool,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000,
测试样例;
"Here you are", ""Are you here" 返回: false
思路:
遍历stringA,统计stringA中每个字符出现的次数,array[a]=b,a是字符,b为该字符出现的次数。
遍历stringB每遍历一个字符,就将该字符出现的次数减一。
如果将该字符减一之后,该字符出现的次数小于0,直接返回false;
如果遍历完stringB之后也没有出现负数,则返回true.
package 字符串问题;
public class case03_变形词 {
public static void main(String[] args) {
String stringA="123";
String stringB="321";
System.out.println(isDeformation(stringA,stringB));
}
public static boolean isDeformation(String stringA,String stringB){
if(stringA==null||stringB==null||stringA.length()!=stringB.length()){
return false;
}
int[] array=new int[256] ;//辅助数组
int i=0;
for(;i<stringA.length();i++){
array[stringA.charAt(i)]++;
}
for(;i<stringB.length();i++){
if((array[stringB.charAt(i)]--)<0){
return false;
}
}
return true;
}
}