美文网首页小白程序媛的职场二三事程序员
算法:判断两个字符串是否包含相同的字符

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

作者: 穿石小水滴 | 来源:发表于2018-04-26 17:15 被阅读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);
        }
    
    }
    

    相关文章

      网友评论

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

        本文链接:https://www.haomeiwen.com/subject/lnjmlftx.html