Write a function named `first_non_repeating_letter` that takes a string input, and returns the first character that is not repeated anywhere in the string.

For example, if given the input `'stress'`, the function should return `'t'`, since the letter *t* only occurs once in the string, and occurs first in the string.

As an added challenge, upper- and lowercase letters are considered the **same character**, but the function should return the correct case for the initial letter.  For example, the input `'sTreSS'` should return `'T'`.

If a string contains *all repeating characters*, it should return an empty string (`""`) or `None` -- see sample tests.

Difficulty: introductory

Starter code:

def first_non_repeating_letter(string):
	

Solutions:
def first_non_repeating_letter(string):
    string_lower = string.lower()
    for i, letter in enumerate(string_lower):
        if string_lower.count(letter) == 1:
            return string[i]
            
    return ""

from collections import Counter
def first_non_repeating_letter(string):
    cnt = Counter(string.lower())
    for letter in string:
        if cnt[letter.lower()] == 1:
            return letter
    return ''

def first_non_repeating_letter(string):
    singles = [i for i in string if string.lower().count(i.lower()) == 1]
    return singles[0] if singles else ''

def first_non_repeating_letter(string):
    
    s = string.lower()
    
    for i in string:
        if s.count(i.lower()) == 1:
            return i
    return ''

def first_non_repeating_letter(string):
    return next((x for x in string if string.lower().count(x.lower())==1), '')

def first_non_repeating_letter(string):
    for x in string:
        if string.lower().count(x.lower()) == 1:
            return x
    return ''

def first_non_repeating_letter(string):
    duplicates = [ i for i in string if string.lower().count(i.lower()) == 1 ]
    return duplicates[0] if duplicates else ''

def first_non_repeating_letter(string):
    return ([a for a in string if string.lower().count(a.lower()) == 1] or [''])[0]
    #your code here


def first_non_repeating_letter(string):
    for char in string:
        if string.lower().count(char.lower()) < 2:
            return char
    return ""

def first_non_repeating_letter(s):
    return ([c for c in s if s.lower().find(c.lower()) == s.lower().rfind(c.lower())] or [""])[0]


def first_non_repeating_letter(string):
    try:
        return next(c for c in string if string.lower().count(c.lower()) == 1)
    except StopIteration:
        return ''

def first_non_repeating_letter(string):
    counter = 0
    for x in string:
        for y in string.lower():
            if y == x.lower():
                counter += 1
        if counter == 1:
            return x
        counter = 0
    return ''

def first_non_repeating_letter(string):
    lowercase_str = string.lower()
    for i in string:
        if lowercase_str.count(i.lower()) == 1:
            return i
    return ""

from collections import Counter

def first_non_repeating_letter(string):
    count = Counter(s.lower() for s in string)
    
    for c in string:
        if count[c.lower()] == 1:
            return c
    
    return str()

def first_non_repeating_letter(string):
    result = sorted(string, key=lambda x: string.lower().count(x.lower()))+['']
    return result[0] if result.count(result[0])== 1 else result[-1]

def first_non_repeating_letter(string):
    return next((ch for ch in string if string.lower().count(ch.lower()) == 1), '')

def first_non_repeating_letter(s):
    seen = set()
    rep = set()
    
    for c in s:
        c = c.lower()
        if c in seen:
            rep.add(c)
        else:
            seen.add(c)
    for c in s:
        if c.lower() not in rep:
            return c
    return ''



def first_non_repeating_letter(string):
    for x in string:
        if x.lower() not in string.lower()[string.index(x)+1:]: return x
    else: return '' 

from collections import Counter
def first_non_repeating_letter(s):
    for c, v in sorted(Counter(s).most_common(), key=lambda t: t[1]):
        if v == 1 and c.swapcase() not in s or not c.isalpha(): return c
    return ''

def first_non_repeating_letter(s):
    for c in s:
        if s.count(c) + s.count(c.swapcase()) * c.isalpha() == 1: return c
    return ''

def first_non_repeating_letter(str1):
    str2 = str1.lower()
    for c in str2:
        if str2.count(c)==1:
            return str1[str2.index(c)]
    return ''
    #your code here


from collections import Counter
def first_non_repeating_letter(string):
    counts = Counter(string.lower())
    try:
        first_unique = next(item[0] for item in counts.items() if item[1]==1)
    except StopIteration:
        return ""
    if first_unique.upper() in string:
        return first_unique.upper()
    else:
        return first_unique

def first_non_repeating_letter(string):
    str = string.lower()
    for x in str:
        if str.count(x) ==1: return string[str.index(x)]
    return ''

def first_non_repeating_letter(string):
    check_list = []
    list_string = list(string.lower())
    for let in string:
        if let not in check_list:
            list_string.remove(let.lower())
            check_list.append(let)
            if let.lower() not in list_string:
                return let
    return ''

def first_non_repeating_letter(string):
    c=''
    if string=='':
        return ''
    count=0
    b=string.lower()
    for i in b:
        a=b.count(i)
        if a==1:
            break
        count+=1
        if count==len(string):
            return ''
    return string[count]

def first_non_repeating_letter(string):
    str = string.lower()

    for i, v in enumerate(str):
        if str.index(v) == str.rindex(v):
            return string[i]

    return ""


def first_non_repeating_letter(some_string):
    # List comprehension:
    #    examine each character in the given string
    #    if the character appears only once, add it to the list
    #    otherwise, add an empty character
    #    join the list back into a string (eliminates empty characters)
    #    now the first character in our string will be the first non-repeating character
    #        NOTE: by using a one-character slice [:1] instead of an index [0] we allow
    #              it to pick up a blank character '' if the string is empty instead of
    #              giving an error for an index that is out of range.
    return ''.join([char if some_string.lower().count(char.lower()) == 1 else '' for char in some_string])[:1]    


def first_non_repeating_letter(string):
    is_unique = lambda char: string.lower().count(char.lower()) == 1
    return next((char for char in string if is_unique(char)), '')

def first_non_repeating_letter(n):
    for i in n:
        if n.lower().count(i.lower())==1:
            return i
    return ''

def first_non_repeating_letter(string):
    low=string.lower()
    a=[ele for ele in dict.fromkeys(low) if low.count(ele)==1]
    return string[low.index(a[0])] if a and string else ''

def first_non_repeating_letter(string):
    return ''.join(i for i in string if string.lower().count(i.lower())==1)[:1]

def first_non_repeating_letter(string):
    cass = "".join(string);
    chars = list(i.lower().replace(" ", "") for i in cass)
    newList = []
    for char, i in zip(chars,string): # run two lists parallel
      count = chars.count(char)
      if count >= 2:
        continue;
      else:
        newList.append(i)
        
    if(len(newList) > 0): 
        return str(newList[0]);
    else: 
        return '';

def first_non_repeating_letter(string):
    strLower = string.lower()
    for let in string:
        if strLower.count(let.lower())==1:
            return let
    return ""
            


def first_non_repeating_letter(string):
    print(string)
    for l in string:
        if string.lower().find(l.lower(), string.find(l)+1) == -1:
            return l
    return ''

def first_non_repeating_letter(string):
    c = [x for x in string if string.lower().count(x.lower())==1]
    if c:
        return c[0]
    else:
        return ''

def first_non_repeating_letter(string):  
    if len(string)==1 or len(string)==0:
        return string  
    for leter in string:
        if (leter.lower() not in string[string.index(leter)+1:].lower()) and (leter.lower() not in string[:string.index(leter)].lower()):
            return(leter)
    else:
        return('')

def first_non_repeating_letter(string): 
    a = [i for i in string.lower()]
    b = 0
    c = [i for i in string]
    if len(string)==1: return string
    while b<len(a)-1:
        if a.count(a[b])==1:
            return c[b]
        else: b+=1
    return ''

def first_non_repeating_letter(string):
    
    if all([string.count(item)>1 for item in string]):return ""
    for i,item in enumerate(string.upper()):
        if string.upper().count(item)==1:return string[i]