Intersection of two strings in Java

前端 未结 10 1297
春和景丽
春和景丽 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:16

    I have used TreeSet. And retainAll() in TreeSet to get matched elements.

    Oracle Doc:

    retainAll(Collection<?> c)
    

    Retains only the elements in this set that are contained in the specified collection (optional operation).

    String s1 = new String("Sychelless");
    String s2 = new String("Sydney");
    
    Set<Character> firstSet = new TreeSet<Character>();
    for(int i = 0; i < s1.length(); i++) {
        firstSet.add(s1.charAt(i));
    }
    
    Set<Character> anotherSet = new TreeSet<Character>();
    for(int i = 0; i < s2.length(); i++) {
        anotherSet.add(s2.charAt(i));
    }
    
    firstSet.retainAll(anotherSet);
    System.out.println("Matched characters are " + firstSet.toString());//print common strings
    
    //output > Matched characters are [S, e, y]
    
    0 讨论(0)
  • 2020-11-30 08:19

    By means of Guava this task seems much easier:

    String s1 = new String("Sychelless");
    String s2 = new String("Sydney");
    Set<String> setA = Sets.newHashSet(Splitter.fixedLength(1).split(s1));
    Set<String> setB = Sets.newHashSet(Splitter.fixedLength(1).split(s2));
    Sets.intersection(setA, setB);
    
    0 讨论(0)
  • 2020-11-30 08:25

    I think the algorithm you are looking for is the problem of the longest common subsequence

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

    Found same question here, refer this

    Implementing an efficent algorithm to find the intersection of two strings

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

    Optimized solution:

    public static String twoStrings(String s1, String s2){
    
        HashSet<Character> stringOne =  new HashSet<Character>(), stringTwo = new HashSet<Character>();  
        int stringOneLength = s1.length();
        int stringTwoLength = s2.length();
        for(int i=0; i<stringOneLength || i<stringTwoLength; i++) {
            if(i < stringOneLength)
                stringOne.add(s1.charAt(i));
            if(i < stringTwoLength)
                stringTwo.add(s2.charAt(i));
        }
        stringOne.retainAll(stringTwo);
    
        return stringOne.toString();
    }
    
    0 讨论(0)
  • 2020-11-30 08:30

    Extract the characters

    String.toCharArray
    

    Put them in a Set Find the intersection

    Set.retainAll
    
    0 讨论(0)
提交回复
热议问题