判断字符串重排后是否相同(区分大小写)



/**
 * 题目: 
 * 给定两个字符串,请编写程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。
 * 这里规定大小写为不同字符,且考虑字符串重点空格。
 * 给定一个string stringA和一个string stringB,
 * 请返回一个boolean,代表两串是否重新排列后可相同。保证两串的长度都小于等于5000。 
 * 测试样例:
 * "This is nowcoder", "is This nowcoder" 返回:true 
 * "Here you are", "Are you here" 返回:false
 * */

/**
 * 解题思路: 
 * 先判断大小是否相同。不同则直接返回false 
 * 相同,则使用两个大小为256的散列表,通过一次遍历找到每一个字符出现的次数
 * 再遍历hashTable来判断每一个字符出现的次数是否相同。一旦某个字符出现不同次数 
 * 直接返回false 全部相同返回true
 * */
public class SameString {
	
	public boolean checkSame(String stringA, String stringB) {
        
		//保证两串的长度都小于等于5000
		if(stringA.length() > 5000 || stringB.length() > 5000)
			return false;
		
		int lenA = stringA.length();
		int lenB = stringB.length();
		
		//先判断大小是否相同。不同则直接返回false
		if(lenA!=lenB)
			return false;
		
		//相同,则使用两个大小为256的散列表,通过一次遍历找到每一个字符出现的次数
		int[] strA = new int[256];
		int[] strB = new int[256];
		for(int i=0; i<lenA; i++){
			strA[stringA.charAt(i)]++;
			strB[stringB.charAt(i)]++;
		}
		
		//再遍历hashTable来判断每一个字符出现的次数是否相同。
		//一旦某个字符出现不同次数,直接返回false,全部相同返回true 
		for(int j=0; j<256; j++){
			if(strA[j]!=strB[j]){
				return false;
			}
		}
		
		return true;
    }
	
	public static void main(String[] args) {
		SameString same = new SameString();
		String stringA = "Are you here";
		String stringB = "Here you are";
		boolean f = same.checkSame(stringA, stringB);
		System.out.println(f);
	}

}

/**
 * 输出:
 * false
 * */

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值