方法一: 最笨的方法,循环遍历,可以把字符串转化为数组,然后排序,然后比较。function : compare1
方法二: 以空间换取时间, 把两个字符串分别转换为字符数组,然后另外i用一个数组str,每个元素初始化为0,然后遍历第一个字符数组,减字符‘0’可得到其对应的ASCII码从而转化为整数n,把str数组的第n个元素加1, 然后遍历第二个字符数组进行同样的操作,只是第n个元素不是加1而是减1, 这样若是str数组有元素为0,则说明两个字符串有相同的字符。function : compare2
方法三: 方法二的延伸,利用map的特点,先把第一个字符串的每一个字符作为key插入,再插入第二个字符串的每一个字符,map的key是唯一的,如果不能插入,则表明此字符在第一个字符串中存在。
下面是方法一和方法二的java实现,方法三还在测试中。
package com.robin.stringAndSZ;
import java.util.Arrays;
public class CompareString {
public static void compare1(String str1,String str2){
char[] str1ToChar = str1.toCharArray();
char[] str2ToChar = str2.toCharArray();
Arrays.sort(str1ToChar);
Arrays.sort(str2ToChar);
if(new String(str1ToChar).equals(new String(str2ToChar))){
System.out.println("The two strings are composed of the same char");
}else{
System.out.println("The two strings are not composed of the same char");
}
}
public static void compare2(String str1,String str2){
char[] str1ToChar = str1.toCharArray();
char[] str2ToChar = str2.toCharArray();
char[] str = new char[256];
for(int i = 0; i < str.length; i++){
str[i] = 0;
}
for(int i = 0 ; i < str1ToChar.length ; i++){
str[str1ToChar[i]-'0']++;
}
for(int i = 0 ; i < str2ToChar.length ; i++){
str[str2ToChar[i]-'0']--;
}
for(int i = 0; i < str.length; i++){
if(str[i] != 0){
System.out.println("The two string have the same char");
return;
}
}
System.out.println("The two strings don't have the same char");
}
public static void main(String[] args) {
String str1 = "aaaabbbb";
String str2 = "abababab";
String str3 = "abcabcab";
compare1(str1,str3);
compare1(str1,str2);
compare2(str1,str3);
compare2(str1,str2);
}
}