java 判断两个字符串是否由相同的字符组成 排序算法 空间换时间的方法


 *  判断两个字符串是否由 相同的字符组成
 *  1.排序算法:将两个字符串转化为数组,并进行排序,将排序后的数组转化为字符串,
 *            并进行比较,得出结果
 *  2.空间换时间的方法:  
 *            (1)额外增加一个count数组,根据ASCII 数组大小为:256
 *               用来记录每个字符的个数
 *            (2)将两个字符串转化为数组  
 *            (3)遍历第一个数组,对第一个数组进行字符数统计,count[a[i]]++
 *            (4)遍历第二个数组,对统计后的count数组,进行count[b[i]]--
 *            (5)经过上述操作,如果count数组值全部为0,那么两个字符串相等, 否则不等!

     

package datastruct.usearray;

import java.util.Arrays;

public class JudgeSameString {
	//排序法
	private static void judgeMethod1(String a_string,String b_string) {
		byte[] a=a_string.getBytes();
		byte[] b=b_string.getBytes();
		Arrays.sort(a);
		Arrays.sort(b);
		String aString=new String(a);
		String bString=new String(b);
		if (a_string.equals(bString)) {
			System.out.println("两个字符串相同!");
		}else {
			System.out.println("两个字符串不同!");
		}
		
	}
	//时间换空间
	private static void judgeMethod2(String a_string,String b_string) {
		byte[] a=a_string.getBytes();
		byte[] b=b_string.getBytes();
		int [] count=new int[256];
		//初始化count
		for (int i = 0; i < count.length; i++) {
			count[i]=0;
		}
		//进行字符个数统计
		for (int i = 0; i < a.length; i++) {
			count[a[i]-'0']++;
		}
		//消除字符个数
		for (int i = 0; i < b.length; i++) {
			count[b[i]-'0']--;
		}
		for (int i = 0; i < count.length; i++) {
			if (count[i]!=0) {
				System.out.println("两个字符串不同!");
				return;
			}
		}
		System.out.println("两个字符串相同!");
	}
	
      public static void main(String[] args) {
		String a_string="aaabbc";
		String b_string="abcbaaa";
		judgeMethod1(a_string, b_string);
		judgeMethod2(a_string, b_string);
		
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值