判断两个字符串是否互为变形词

   题目 

  给定两个字符串str1和str2,如果str1和str2中出现的字符种类一样且每种字符出现的次数也一样,那么str1和str2互为变形词。请实现函数判断两个字符串是否互为变形词。

   举例

  str1="396",str2="936",返回true。

  str1="396",str2="3691",返回false。

   解答

  1.如果字符串str1和str2的长度不一样,直接返回false。

2.如果长度相同,假设出现的字符编码值在0-255之间,可以先申请一个整型数组arr,arr[a]=b代表字符编码为a的字符出现了b次。初始时arr[0-255]的值都为0,然后遍历字符串str1,计算每种字符出现的次数。比如,遍历的字符‘a',其编码值为97,则arr[97]++。同理,遍历字符串str2,arr[97]--。如果减少之后的值小于0,返回false。如果遍历完str2,arr中的值也没出现,则返回false。

3.如果字符的种类很多,可以使用哈希表代替整型数组。

package src;

public class isDeformation {
	public  boolean Deformation(String str1,String str2){
		if(str1==null||str2==null||str1.length()!=str2.length()){
			return false;
		}
		char[]chas1=str1.toCharArray();
		char[]chas2=str2.toCharArray();
		int []map=new int[256];
		for(int i=0;i<chas1.length;i++){
			map[chas1[i]]++;
		}
		for(int i=0;i<chas2.length;i++){
			if(map[chas2[i]]--==0){
				return false;
			}
		}
		return true;
	}
	public static void main(String []args){
		isDeformation st=new isDeformation();
		System.out.println(st.Deformation("1223", "2213"));
	}
}





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值