Intersection of two strings in Java

前端 未结 10 1298
春和景丽
春和景丽 2020-11-30 07:48

Need a Java function to find intersection of two strings. i.e. characters common to the strings.

Example:

String s1 = new String(\"Sychelless\");
St         


        
相关标签:
10条回答
  • 2020-11-30 08:40

    Using HashSet<Character>:

    HashSet<Character> h1 = new HashSet<Character>(), h2 = new HashSet<Character>();
    for(int i = 0; i < s1.length(); i++)                                            
    {
      h1.add(s1.charAt(i));
    }
    for(int i = 0; i < s2.length(); i++)
    {
      h2.add(s2.charAt(i));
    }
    h1.retainAll(h2);
    Character[] res = h1.toArray(new Character[0]);
    

    This is O(m + n), which is asymptotically optimal.

    0 讨论(0)
  • 2020-11-30 08:40

    More detail on saugata's response (appeared while I was writing this): -

    public static void main(String[] args) {
        String s1 = "Seychelles";
        String s2 = "Sydney";
        Set<Character> ss1 = toSet(s1);
        ss1.retainAll(toSet(s2));
        System.out.println(ss1);
    }
    
    public static Set<Character> toSet(String s) {
        Set<Character> ss = new HashSet<Character>(s.length());
        for (char c : s.toCharArray())
            ss.add(Character.valueOf(c));
        return ss;
    }
    
    0 讨论(0)
  • 2020-11-30 08:41
    s1.contains(s2) returns true;
    s1.indexOf(s2) returns 0. 
    s1.indexOf("foo") returns -1
    

    For more sophisticated cases use class Pattern.

    0 讨论(0)
  • 2020-11-30 08:42

    Most basic approach:

    String wordA = "Sychelless";  
    String wordB = "Sydney";  
    String common = "";  
    
    for(int i=0;i<wordA.length();i++){  
        for(int j=0;j<wordB.length();j++){  
            if(wordA.charAt(i)==wordB.charAt(j)){  
                common += wordA.charAt(i)+" ";  
                break;
            }  
        }  
    }  
    System.out.println("common is: "+common);  
    
    0 讨论(0)
提交回复
热议问题