forked from TheAlgorithms/JavaScript
- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathCheckRearrangePalindrome.js
More file actions
Latest commit
37 lines (32 loc) · 1.09 KB
/
Copy pathCheckRearrangePalindrome.js
File metadata and controls
37 lines (32 loc) · 1.09 KB
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
/**
* What is a palindrome? https://en.wikipedia.org/wiki/Palindrome
* Receives a string and returns whether it can be rearranged to become a palindrome or not
* The string can only be a palindrome if the count of ALL characters is even or if the ONLY ONE character count is odd
* Input is a string
*
**/
exportconstpalindromeRearranging=(str)=>{
// check that input is a string
if(typeofstr!=='string'){
return'Not a string'
}
// Check if is a empty string
if(!str){
return'Empty string'
}
// First obtain the character count for each character in the string and store it in an object.
// Filter the object's values to only the odd character counts.
constcharCounts=[...str].reduce((counts,char)=>{
counts[char]=counts[char] ? counts[char]+1 : 1
returncounts
},{})
// If the length of the resulting array is 0 or 1, the string can be a palindrome.
return(
Object.values(charCounts).filter((count)=>count%2!==0).length<=1
)
}
// testing
// > palindromeRearranging('aaeccrr')
// true
// > palindromeRearranging('leve')
// false