It all depends what you mean by common characters. Do “CAMPBELL” and “RITCHIE” have C and E as common characters because C and E both appear? Or do they have no common characters because the first two characters are different, the second two different, etc. In the latter case “three” and “ether” would have one e in common, as the 4th character, which can be found as pairs in linear time by iterating the String. If you use the set solution above, you will get 4 duplicates: ehrt, because those two words are anagrams of each other.
But that Set thing is a good solution, which will also run in linear time.
Just a small point: if Harsha's solution was changed to use LinkedHashSet's, it's likely that the original character order would be retained in the resulting Set, admittedly at a small (but linear) cost in speed.
Isn't it funny how there's always time and money enough to do it WRONG?
Articles by Winston can be found here
Joined: Oct 13, 2005
Good idea; you would get t-h-r-e from three and e-t-h-r from ether.
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com
subject: Finding common characters of two strings in O(n)