Skip to content

Commit afb2124

Browse files
committed
Add IsPermutationPalindrome
1 parent 5dc490e commit afb2124

File tree

6 files changed

+70
-1
lines changed

6 files changed

+70
-1
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ your time before you take a look at the presented solution. **Good luck!**
5858
**Apprentice**
5959
- [Is palindrome](app/src/test/java/com/igorwojda/string/ispalindrome/basic/IsPalindrome.md)
6060
- [Is tolerant palindrome](app/src/test/java/com/igorwojda/string/ispalindrome/tolerant/IsTolerantPalindrome.md)
61+
- [Is permutation palindrome](app/src/test/java/com/igorwojda/string/ispalindrome/permutation/IsPermutationPalindrome.md)
6162
- [Is anagram](app/src/test/java/com/igorwojda/string/isanagram/IsAnagram.md)
6263
- [Max occurring char](app/src/test/java/com/igorwojda/string/maxchar/MaxOccurrentChar.md)
6364
- [String reverse](app/src/test/java/com/igorwojda/string/reverse/Reverse.md)
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
package com.igorwojda.string.ispalindrome.permutation
2+
3+
import org.amshove.kluent.shouldBeEqualTo
4+
import org.junit.Test
5+
6+
private fun isPermutationPalindrome(str: String): Boolean {
7+
TODO("not implemented")
8+
}
9+
10+
class IsPermutationPalindromeTest {
11+
@Test
12+
fun `"gikig" is a palindrome`() {
13+
isPermutationPalindrome("gikig") shouldBeEqualTo true
14+
}
15+
16+
@Test
17+
fun `"ookvk" is a palindrome`() {
18+
isPermutationPalindrome("ookvk") shouldBeEqualTo true
19+
}
20+
21+
@Test
22+
fun `"sows" is a palindrome`() {
23+
isPermutationPalindrome("sows") shouldBeEqualTo false
24+
}
25+
26+
@Test
27+
fun `"tami" is a palindrome`() {
28+
isPermutationPalindrome("tami") shouldBeEqualTo false
29+
}
30+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
# Is permutation palindrome
2+
3+
## Nice to solve before
4+
5+
- [Palindrome](../basic/IsPalindrome.md)
6+
7+
## Instructions
8+
9+
Given a string, return true if the input string is an a permutation of palindrome or false if it is not.
10+
11+
Palindromes are strings that form the same word if it is reversed.
12+
13+
[Puzzle](IsPermutationPalindrome.kt) | [Solution](IsPermutationPalindromeSolution.kt)
14+
15+
## Examples
16+
17+
```
18+
permutationPalindrome("gikig") == true
19+
20+
permutationPalindrome("ookvk") == true
21+
22+
permutationPalindrome("sows") == false
23+
24+
permutationPalindrome("tami") == false
25+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.igorwojda.string.ispalindrome.permutation
2+
3+
// frequency map solution
4+
private object Solution1 {
5+
private fun isPermutationPalindrome(str: String, characterRemoved: Boolean = false): Boolean {
6+
val charactersFrequencyMap = str.groupingBy { it }.eachCount()
7+
8+
val filtered = charactersFrequencyMap.filter { it.value % 2 == 1 }
9+
10+
return filtered.size <= 1
11+
}
12+
}

misc/PuzzleGroups.md

+1
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,7 @@ We use sliding window instead of nested loops which decreases complexity from `O
139139
- [Is anagram](../app/src/test/java/com/igorwojda/string/isanagram/IsAnagram.md)
140140
- [Is palindrome](../app/src/test/java/com/igorwojda/string/ispalindrome/basic/IsPalindrome.md)
141141
- [Is tolerant palindrome](../app/src/test/java/com/igorwojda/string/ispalindrome/tolerant/IsTolerantPalindrome.md)
142+
- [Is permutation palindrome](app/src/test/java/com/igorwojda/string/ispalindrome/permutation/IsPermutationPalindrome.md)
142143
- [Is substring](../app/src/test/java/com/igorwojda/string/issubstring/IsSubstring.md)
143144
- [Longest word](../app/src/test/java/com/igorwojda/string/longestword/LongestWord.md)
144145
- [Max occurrent char](../app/src/test/java/com/igorwojda/string/maxchar/MaxOccurrentChar.md)

misc/PuzzleOrder.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -70,4 +70,4 @@ This section contains all puzzles in order in which they where added to reposito
7070
64. [Doubly linked list](../app/src/test/java/com/igorwojda/linkedlist/doubly/base/DoublyLinkedList.md)
7171
65. [Binary search tree](../app/src/test/java/com/igorwojda/tree/binarysearchtree/BinarySearchTree.md)
7272
66. [Max binary heap](../app/src/test/java/com/igorwojda/tree/heap/maxbinaryheap/MaxBinaryHeap.md)
73-
73+
67. [Is permutation palindrome](app/src/test/java/com/igorwojda/string/ispalindrome/permutation/IsPermutationPalindrome.md)

0 commit comments

Comments
 (0)