From 03b7c6f33be158cbbab05ce4d77c04c4c7a08392 Mon Sep 17 00:00:00 2001 From: Nour B <56294154+nourrrrrrrr@users.noreply.github.com> Date: Wed, 6 May 2020 10:26:47 +0100 Subject: [PATCH] Create palindrome algorithm (#134) * Create palindrome algorithm * Update Palindrome.js Co-authored-by: vinayak --- maths/Palindrome.js | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 maths/Palindrome.js diff --git a/maths/Palindrome.js b/maths/Palindrome.js new file mode 100644 index 000000000..4abc8d997 --- /dev/null +++ b/maths/Palindrome.js @@ -0,0 +1,51 @@ +/** + * 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) + */ + +function 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)) +} + +function 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 +} + +// testing + +console.log(PalindromeRecursive('Javascript Community')) +console.log(PalindromeIterative('mom'))