Ad
  • Default User Avatar

    Similar pairs would imply some approximate matching rather than exact whole word matching.
    Perhaps ignoring case by mapping to lower case:

    var seenWords = Arrays.stream(words).map(String::toLowerCase).collect(Collectors.toSet());

    But similar pairs is also not quite right -- more like "count duplicates".
    Otherwise the similar pairs eg in
    {"Volvo", "Volvo", "BMW", "Mazda", "BMW"}
    would be 2 -- a pair of Volvos and a pair of BMWs.

    And how many pairs are there in { "Volvo", "Volvo", "Volvo", "Mazda" } ?
    Actually 3 - there are 3 ways to pick a pair of Volvos from the list 😆!

  • Custom User Avatar

    Every string is added only once. If you look at the diff, you can see why this works: Every string that can not be added is counted, because the set contains it already. The difference of the lengths is the same value as counting strings that can not be added, because the sets contains them already.

  • Custom User Avatar

    where do you check if the strings are similar?
    you add them and subtract the lengths