Solve InterviewCake permutation-palindrome problem
Write a predicate to test whether any permutation of an input string is a palindrome.
This commit is contained in:
		
							parent
							
								
									6249e19cdc
								
							
						
					
					
						commit
						93d654df77
					
				
					 2 changed files with 38 additions and 1 deletions
				
			
		
							
								
								
									
										37
									
								
								scratch/deepmind/part_two/permutation-palindrome.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										37
									
								
								scratch/deepmind/part_two/permutation-palindrome.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,37 @@ | ||||||
|  | import unittest | ||||||
|  | from collections import Counter | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | def has_palindrome_permutation(xs): | ||||||
|  |     vs = Counter(xs).values() | ||||||
|  |     return len([v for v in vs if v % 2 == 1]) in {0, 1} | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | # Tests | ||||||
|  | class Test(unittest.TestCase): | ||||||
|  |     def test_permutation_with_odd_number_of_chars(self): | ||||||
|  |         result = has_palindrome_permutation('aabcbcd') | ||||||
|  |         self.assertTrue(result) | ||||||
|  | 
 | ||||||
|  |     def test_permutation_with_even_number_of_chars(self): | ||||||
|  |         result = has_palindrome_permutation('aabccbdd') | ||||||
|  |         self.assertTrue(result) | ||||||
|  | 
 | ||||||
|  |     def test_no_permutation_with_odd_number_of_chars(self): | ||||||
|  |         result = has_palindrome_permutation('aabcd') | ||||||
|  |         self.assertFalse(result) | ||||||
|  | 
 | ||||||
|  |     def test_no_permutation_with_even_number_of_chars(self): | ||||||
|  |         result = has_palindrome_permutation('aabbcd') | ||||||
|  |         self.assertFalse(result) | ||||||
|  | 
 | ||||||
|  |     def test_empty_string(self): | ||||||
|  |         result = has_palindrome_permutation('') | ||||||
|  |         self.assertTrue(result) | ||||||
|  | 
 | ||||||
|  |     def test_one_character_string(self): | ||||||
|  |         result = has_palindrome_permutation('a') | ||||||
|  |         self.assertTrue(result) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | unittest.main(verbosity=2) | ||||||
|  | @ -6,7 +6,7 @@ | ||||||
| ** DONE Cafe Order Checker | ** DONE Cafe Order Checker | ||||||
| * Hashing and hash tables | * Hashing and hash tables | ||||||
| ** DONE Inflight Entertainment | ** DONE Inflight Entertainment | ||||||
| ** TODO Permutation Palindrome | ** DONE Permutation Palindrome | ||||||
| ** TODO Word Cloud Data | ** TODO Word Cloud Data | ||||||
| ** TODO Top Scores | ** TODO Top Scores | ||||||
| * Greedy Algorithms | * Greedy Algorithms | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue