pythonpython-3.xsortingalphabetical-sort

Trying to sort two combined strings alphabetically without duplicates


Challenge: Take 2 strings s1 and s2 including only letters from a to z. Return a new sorted string, the longest possible, containing distinct letters - each taken only once - coming from s1 or s2.

# Examples
a = "xyaabbbccccdefww"
b = "xxxxyyyyabklmopq"
assert longest(a, b) == "abcdefklmopqwxy"
a = "abcdefghijklmnopqrstuvwxyz"
assert longest(a, a) == "abcdefghijklmnopqrstuvwxyz"

So I am just starting to learn, but so far I have this:

def longest(a1, a2):
    for letter in max(a1, a2):
        return ''.join(sorted(a1+a2))

which returns all the letters but I am trying to filter out the duplicates.

This is my first time on stack overflow so please forgive anything I did wrong. I am trying to figure all this out.

I also do not know how to indent in the code section if anyone could help with that.


Solution

  • You have two options here. The first is the answer you want and the second is an alternative method


    To filter out duplicates, you can make a blank string, and then go through the returned string. For each character, if the character is already in the string, move onto the next otherwise add it

    out = ""
    for i in returned_string:
        if i not in out:
            out += i
    return out
    

    This would be empedded inside a function

    The second option you have is to use Pythons sets. For what you want to do you can consider them as lists with no dulicate elements in them. You could simplify your function to

    def longest(a: str, b: str):
        return "".join(set(a).union(set(b)))
    

    This makes a set from all the characters in a, and then another one with all the characters in b. It then "joins" them together (union) and you get another set. You can them join all the characters together in this final set to get your string. Hope this helps