您的位置:首页 > 其它

字符串之变形数

2015-11-03 21:17 232 查看

字符串之变形数

题目:给定2个字符串str1和str2,如果str1和str2出现的字符种类和每个字符出现的个数也一样,那么str1与str2互为变形数。请用函数实现。

例子:str1="123", str2="231" 返回 true

例子:str1="123", str2="2311" 返回 false;

解题思路

方法1:如果字符串str1和str2长度不一样肯定不是变形数,如果相等的话,假设出现的的字符编码为0~256,申请一个长度为256的整形数组map,map[a]=b,表示字符a出现了b次,然后遍历str1,比如遍历到‘a’,那么是a[97]++,,然后遍历str2,当遍历到‘a’,那么map[97]--,如果其中只要有一种情况小于0,那么肯定不是变形数字了,如果想不通,慢慢想,总会想得通的,加油。

方法2:既然str1和str2可以转换成字符编码0~256,而且每个可以把每个字符的编码加起来,如果2个字符编码都相等的话,那么是变形数,前提是字符串的长度是一样的的,以防1+2+3=2+4;的情况出现。

下面是实现的java代码

public class Changeword {
public static void main(String[] args) {
String str1="abcd",str2="abcdd",str3="abcd";
System.out.println("str1和str2是变形数吗?"+isChangeWord1(str1,str2));
System.out.println("str2和str3是变形数吗?"+isChangeWord1(str2,str3));
System.out.println("str1和str3是变形数吗?"+isChangeWord1(str1,str3));

System.out.println("str1和str2是变形数吗?"+isChangeWord2(str1,str2));
System.out.println("str2和str3是变形数吗?"+isChangeWord2(str2,str3));
System.out.println("str1和str3是变形数吗?"+isChangeWord2(str1,str3));
}
//判断是否为变形数
public static boolean isChangeWord1(String str1,String str2){
if(str1  ==null|| str2 == null || str1.length()!=str2.length()){  //字符串为空和长度都不想等,怎么可能是变形数字
return false;
}
char[] chars1=str1.toCharArray();
char[] chars2=str2.toCharArray();
int [] map=new int[256];                                                           //map[a]=b;表现a出现了b次,因为字符编码在0到256之间
for(int i=0;i<chars1.length;i++){
map[chars1[i]]++;
}
for(int i=0;i<chars2.length;i++){
if(map[chars2[i]]--<0){
return false;
}
}
return true;
}

//判断是否为变形数
public static boolean isChangeWord2(String str1,String str2){
if(str1  ==null|| str2 == null || str1.length()!=str2.length()){  //字符串为空和长度都不想等,怎么可能是变形数字
return false;
}
char[] chars1=str1.toCharArray();
char[] chars2=str2.toCharArray();
int sum1=0;
int sum2=0;
for(int i=0;i<chars1.length;i++){
sum1+=chars1[i];
}
for(int i=0;i<chars2.length;i++){
sum2+=chars2[i];
}
if(sum1!=sum2){
return  false;
}
return true;
}
}


结果:

str1和str2是变形数吗?false
str2和str3是变形数吗?false
str1和str3是变形数吗?true
str1和str2是变形数吗?false
str2和str3是变形数吗?false
str1和str3是变形数吗?true
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: