如何判断两个字符串是否由相同的字符组成

package java程序员面试笔试宝典;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class 题8_6_2字符串是否由相同字符组成 {
	
	public static void main(String[] args) {
		String str1="bbaadca";
		String str2="abcbaad";
		System.out.println(isComSame_2(str1, str2));
		
	}
	//hashmap法
	public static boolean isComSame_2(String str1,String str2){
		if(str1==null||str2==null||str1.length()!=str2.length()){
			return false;
		}
		char[] chs1=str1.toCharArray();
		char[] chs2=str2.toCharArray();
		Map<Character, Integer> map=new HashMap<Character, Integer>();
		for (int i = 0; i < chs1.length; i++) {
			if(map.containsKey(chs1[i])){
				map.put(chs1[i], map.get(chs1[i])+1);
			}else{
				map.put(chs1[i], 1);
			}
			
			if(map.containsKey(chs2[i])){
				map.put(chs2[i], map.get(chs2[i])-1);
				
			}else{
				map.put(chs2[i], -1);
			}
		}
	    for (Character c : map.keySet()) {
			if(map.get(c)!=0){
				return false;
			}
		}
		return true;
	}
	
	
	//排序法1
	public static boolean isComSame_1(String str1,String str2){
		if(str1==null||str2==null){
			return false;
		}
		byte[] s1=str1.getBytes();
		byte[] s2=str2.getBytes();
		Arrays.sort(s1);
		Arrays.sort(s2);
		String st1=new String(s1);
		String st2=new String(s2);
		
		return st1.equals(st2);
	}
	public static boolean isComSame_0(String str1,String str2){
		if(str1==null||str2==null||str1.length()!=str2.length()){
			return false;
		}
		int[] bitCount=new int[256];
		for (int i = 0; i < str1.length(); i++) {
			bitCount[str1.charAt(i)-'0']++;
		}
		for (int i = 0; i < str2.length(); i++) {
			bitCount[str2.charAt(i)-'0']--;
		}
		for (int i = 0; i < bitCount.length; i++) {
			if(bitCount[i]!=0){
				return false;
			}
		}
		return true;
	}
	
	//排序法
	public static boolean isComSame(String str1,String str2){
		if(str1==null||str2==null||str1.length()!=str2.length()){
			return false;
		}
		char[] chs1=str1.toCharArray();
		char[] chs2=str2.toCharArray();
		Arrays.sort(chs1);
		Arrays.sort(chs2);
		for (int i = 0; i < chs1.length; i++) {
			if(chs1[i]!=chs2[i]){
				return false;
			}
		}
		return true;
	}
}

猜你喜欢

转载自blog.csdn.net/m0_38068868/article/details/81738748