-
Notifications
You must be signed in to change notification settings - Fork 0
/
valid_anagra.py
65 lines (53 loc) · 1.7 KB
/
valid_anagra.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
'''
This question is asked by Facebook. Given two strings s and t return whether or not s is an anagram of t.
Note: An anagram is a word formed by reordering the letters of another word.
Ex: Given the following strings...
s = "cat", t = "tac", return true
s = "listen", t = "silent", return true
s = "program", t = "function", return false
'''
def anagram(s1,s2):
# Remove spaces and lowercase letters
s1 = s1.replace(' ','').lower()
s2 = s2.replace(' ','').lower()
# Return boolean for sorted match.
return sorted(s1) == sorted(s2)
s = "cat"; t = "tac"
print( anagram(s,t))
s = "listen"; t = "silent"
print( anagram(s,t))
s = "program"; t = "function"
print( anagram(s,t))
def anagram2(s1,s2):
# Remove spaces and lowercase letters
s1 = s1.replace(' ','').lower()
s2 = s2.replace(' ','').lower()
# Edge Case to check if same number of letters
if len(s1) != len(s2):
return False
# Create counting dictionary (Note could use DefaultDict from Collections module)
count = {}
# Fill dictionary for first string (add counts)
for letter in s1:
if letter in count:
count[letter] += 1
else:
count[letter] = 1
# Fill dictionary for second string (subtract counts)
for letter in s2:
if letter in count:
count[letter] -= 1
else:
count[letter] = 1
# Check that all counts are 0
for k in count:
if count[k] != 0:
return False
# Otherwise they're anagrams
return True
s = "cat"; t = "tac"
print( anagram2(s,t))
s = "listen"; t = "silent"
print( anagram2(s,t))
s = "program"; t = "function"
print( anagram2(s,t))