There is an array of strings. All strings contains similar _letters_ except one. Try to find it!

```python
find_uniq([ 'Aa', 'aaa', 'aaaaa', 'BbBb', 'Aaaa', 'AaAaAa', 'a' ]) # => 'BbBb'
find_uniq([ 'abc', 'acb', 'bac', 'foo', 'bca', 'cab', 'cba' ]) # => 'foo'
```

Strings may contain spaces. Spaces is not significant, only non-spaces symbols matters. E.g. string that contains only spaces is like empty string.

It’s guaranteed that array contains more than 3 strings.

This is the second kata in series:

1. [Find the unique number](https://www.codewars.com/kata/585d7d5adb20cf33cb000235)
2. Find the unique string (this kata)
3. [Find The Unique](https://www.codewars.com/kata/5862e0db4f7ab47bed0000e5)

Source: codewars | Difficulty: EASY
Tags: String algorithms

Fundamentals

Data structures

Starter code: def find_uniq(arr):
	

Solutions:
from collections import defaultdict

def find_uniq(a):
	d = {}
	c = defaultdict(int)
	for e in a:
		t = frozenset(e.strip().lower())
		d[t] = e
		c[t] += 1
	return d[next(filter(lambda k: c[k] == 1, c))]


def find_uniq(arr):
	if set(arr[0].lower()) == set(arr[1].lower()):
		majority_set = set(arr[0].lower())
	elif set(arr[0].lower()) == set(arr[2].lower()):
		majority_set = set(arr[0].lower())
	else:
		majority_set = set(arr[1].lower())
	for string in arr:
		if set(string.lower()) != majority_set:
			return string


def find_uniq(arr):
	arr.sort(key=lambda x: x.lower())
	arr1 = [set(i.lower()) for i in arr]
	return arr[0] if arr1.count(arr1[0]) == 1 and str(arr1[0]) != 'set()' else arr[-1]


import numpy as np

def find_uniq(arr):
	arr1 = [''.join(sorted(set(i.lower().replace(' ', '')))) for i in arr]
	lst = np.unique(arr1)
	for i in lst:
		if arr1.count(i) == 1:
			return arr[arr1.index(i)]


from collections import Counter

def find_uniq(arr):
	c = Counter(''.join(arr).lower())
	match = [string_ for string_ in arr if min(c, key=c.get) in string_.lower()]
	return match[0]


def find_uniq(arr):
	counts = {}
	result = {}
	for s in arr:
		hash = frozenset(s.strip().lower())
		counts[hash] = counts.get(hash, 0) + 1
		result[hash] = s
		if len(counts) > 1 and counts[max(counts, key=counts.get)] > 1:
			return result[min(counts, key=counts.get)]


from collections import Counter

def find_uniq(arr):
	res = Counter(''.join(arr)).most_common()
	return ''.join([x for x in arr if res[-1][0] in x])


def find_uniq(arr):
	S = ''.join(arr)
	D = {}
	for i in S:
		D[i] = D.get(i, 0) + 1
	L = sorted([(v, k) for (k, v) in list(D.items())], reverse=True)
	Minv = L[-1][0]
	Min = L[-1][1]
	for word in arr:
		if word.count(Min) >= Minv:
			return word