小白程序媛的职场二三事程序员

算法:判断两个字符串是否包含相同的字符

2018-04-26  本文已影响4人  穿石小水滴

方法一: 最笨的方法,循环遍历,可以把字符串转化为数组,然后排序,然后比较。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);
    }

}
上一篇下一篇

猜你喜欢

热点阅读