chapter 1 hackerrank problems
string category, easy problems
This commit is contained in:
parent
07ee63c9ef
commit
7d0c00f534
|
|
@ -0,0 +1,26 @@
|
||||||
|
# Algorithms > Strings > Making Anagrams
|
||||||
|
# https://www.hackerrank.com/challenges/making-anagrams
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
def makingAnagrams(s1, s2):
|
||||||
|
counts = Counter(s1)
|
||||||
|
counts.subtract(s2)
|
||||||
|
return sum(abs(x) for x in counts.values())
|
||||||
|
|
||||||
|
class Test(unittest.TestCase):
|
||||||
|
|
||||||
|
data = [(('a', 'b'), 2),
|
||||||
|
(('ab', 'ab'), 0),
|
||||||
|
(('abc', 'amnop'), 6),
|
||||||
|
(('cde', 'abc'), 4),
|
||||||
|
(('cde', 'abcc'), 5)]
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
for test_string, expected in self.data:
|
||||||
|
res = makingAnagrams(*test_string)
|
||||||
|
self.assertEqual(res, expected)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,29 @@
|
||||||
|
# Algorithms > Strings > Anagram
|
||||||
|
# https://www.hackerrank.com/challenges/anagram
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
from collections import Counter
|
||||||
|
|
||||||
|
def anagram(s):
|
||||||
|
if len(s) % 2 == 1:
|
||||||
|
return -1
|
||||||
|
counts = Counter(s[:len(s)//2])
|
||||||
|
counts.subtract(s[len(s)//2:])
|
||||||
|
return sum(abs(x) for x in counts.values())//2
|
||||||
|
|
||||||
|
class Test(unittest.TestCase):
|
||||||
|
|
||||||
|
data = [('aaabbb', 3),
|
||||||
|
('ab', 1),
|
||||||
|
('abc', -1),
|
||||||
|
('mnop', 2),
|
||||||
|
('xyyx', 0),
|
||||||
|
('xaxbbbxx', 1)]
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
for test_string, expected in self.data:
|
||||||
|
res = anagram(test_string)
|
||||||
|
self.assertEqual(res, expected)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
# Algorithms > Strings > Strong Password
|
||||||
|
# https://www.hackerrank.com/challenges/strong-password
|
||||||
|
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
def minimumNumber(s):
|
||||||
|
numbers = "0123456789"
|
||||||
|
lower_case = "abcdefghijklmnopqrstuvwxyz"
|
||||||
|
upper_case = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
|
||||||
|
special_characters = "!@#$%^&*()-+"
|
||||||
|
|
||||||
|
count = 0
|
||||||
|
if not any(x in numbers for x in s):
|
||||||
|
count += 1
|
||||||
|
if not any(x in lower_case for x in s):
|
||||||
|
count += 1
|
||||||
|
if not any(x in upper_case for x in s):
|
||||||
|
count += 1
|
||||||
|
if not any(x in special_characters for x in s):
|
||||||
|
count += 1
|
||||||
|
|
||||||
|
return max(count, 6-len(s))
|
||||||
|
|
||||||
|
class Test(unittest.TestCase):
|
||||||
|
|
||||||
|
data = [('Ab1', 3),
|
||||||
|
('#HackerRank', 1)]
|
||||||
|
|
||||||
|
def test(self):
|
||||||
|
for test_string, expected in self.data:
|
||||||
|
res = minimumNumber(test_string)
|
||||||
|
self.assertEqual(res, expected)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
unittest.main()
|
||||||
Loading…
Reference in New Issue