Files
JavaScript/Maths/Palindrome.js
Ephraim Atta-Duncan e112434dee Add tests to Math (#423)
* Add prettier config

* test: add test to check for absolute function

* chore: es5 to es6

* test: add test to check mean function

* test: add test for sum of digit

* test: add test for factorial

* test: add test for fibonnaci

* test: add test for find HCF

* test: add test for lcm

* test: add gridget test

* test: add test for mean square error

* test: add test for modular binary exponentiation

* test: add tests for palindrome

* test: add test for pascals triangle

* test: add tests for polynomial

* test: add tests for prime check

* test: add tests for reverse polish notation

* test: add tests for sieve of eratosthenes

* test: add tests for pi estimation monte carlo method

* chore: move tests to test folder

* chore: fix standardjs errors
2020-10-12 01:17:49 +05:30

49 lines
1.1 KiB
JavaScript

/**
* A palindrome is any string that can be reversed and still be the same.
* An example of one is 'radar', since it is spelled the same even after
* being reversed. One method to check if a
*
* Here's how this works recursively:
*
* Palindrome('radar')
* true && Palindrome('ada')
* true && true && Palindrome('d')
* true && true && true && true
*
* @flow
* @complexity: O(n)
*/
const PalindromeRecursive = (string) => {
// Base case
if (string.length < 2) return true
// Check outermost keys
if (string[0] !== string[string.length - 1]) {
return false
}
return PalindromeRecursive(string.slice(1, string.length - 1))
}
const PalindromeIterative = (string) => {
const _string = string
.toLowerCase()
.replace(/ /g, '')
.replace(/,/g, '')
.replace(/'.'/g, '')
.replace(/:/g, '')
.split('')
// A word of only 1 character is already a palindrome, so we skip to check it
while (_string.length > 1) {
if (_string.shift() !== _string.pop()) {
return false
}
}
return true
}
export { PalindromeIterative, PalindromeRecursive }