Easy to read palindrome checker The Next CEO of Stack OverflowPalindrome CheckerLargest Palindrome CheckerPalindrome Checker AlgorithmNumber palindrome checkerPalindrome Checker in JavaFinding palindromes in C#Python palindrome checkerTest if a string is a palindromeFinding an equilibrium index in an int arrayPython 3 palindrome checker

If Nick Fury and Coulson already knew about aliens (Kree and Skrull) why did they wait until Thor's appearance to start making weapons?

Necessary condition on homology group for a set to be contractible

Is it professional to write unrelated content in an almost-empty email?

Chain wire methods together in Lightning Web Components

What did we know about the Kessel run before the prequels?

How to get from Geneva Airport to Metabief, Doubs, France by public transport?

What was the first Unix version to run on a microcomputer?

How to invert MapIndexed on a ragged structure? How to construct a tree from rules?

Is micro rebar a better way to reinforce concrete than rebar?

Can we say or write : "No, it'sn't"?

How to edit “Name” property in GCI output?

Would this house-rule that treats advantage as a +1 to the roll instead (and disadvantage as -1) and allows them to stack be balanced?

Does increasing your ability score affect your main stat?

Unclear about dynamic binding

Rotate a column

I want to delete every two lines after 3rd lines in file contain very large number of lines :

Won the lottery - how do I keep the money?

Do I need to write [sic] when a number is less than 10 but isn't written out?

How to count occurrences of text in a file?

Legal workarounds for testamentary trust perceived as unfair

Is it possible to replace duplicates of a character with one character using tr

Does Germany produce more waste than the US?

Help understanding this unsettling image of Titan, Epimetheus, and Saturn's rings?

Why is information "lost" when it got into a black hole?



Easy to read palindrome checker



The Next CEO of Stack OverflowPalindrome CheckerLargest Palindrome CheckerPalindrome Checker AlgorithmNumber palindrome checkerPalindrome Checker in JavaFinding palindromes in C#Python palindrome checkerTest if a string is a palindromeFinding an equilibrium index in an int arrayPython 3 palindrome checker










7












$begingroup$


I made a palindrome checker that's supposed to be designed to be simple and easy to read. Please let me know what you think. I believe the time complexity is $mathcalO(n)$ but I'm not too sure about that:



Challenge: You'll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything into the same case (lower or upper case) in order to check for palindromes.



function reverseString(str)
_/g, "").toLowerCase().split(" ").join("");
var array = [];
for(var i = str.length ; i >=0; i--)

array.push(str[i])

return(array.join(""));



reverseString("My age is 0, 0 si ega ym.");

function palindrome(str) _/g, "").toLowerCase().split(" ").join("");
if(str === reverseString(str))

return true;

else

return false;











share|improve this question











$endgroup$











  • $begingroup$
    Are you sure this is working as intended?
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    The test reverseString("My age is 0, 0 si ega ym."); should at least be something like console.log(palindrome(reverseString("My age is 0, 0 si ega ym.")));, and does your challenge ignore spaces? Because if they don't, your example string should return false while it doesn't. Please clarify the exact challenge.
    $endgroup$
    – Mast
    9 hours ago






  • 1




    $begingroup$
    Sorry I updated it
    $endgroup$
    – DreamVision2017
    9 hours ago










  • $begingroup$
    Much better, thank you.
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    Np, let me know if there's anything else that needs to be changed
    $endgroup$
    – DreamVision2017
    9 hours ago















7












$begingroup$


I made a palindrome checker that's supposed to be designed to be simple and easy to read. Please let me know what you think. I believe the time complexity is $mathcalO(n)$ but I'm not too sure about that:



Challenge: You'll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything into the same case (lower or upper case) in order to check for palindromes.



function reverseString(str)
_/g, "").toLowerCase().split(" ").join("");
var array = [];
for(var i = str.length ; i >=0; i--)

array.push(str[i])

return(array.join(""));



reverseString("My age is 0, 0 si ega ym.");

function palindrome(str) _/g, "").toLowerCase().split(" ").join("");
if(str === reverseString(str))

return true;

else

return false;











share|improve this question











$endgroup$











  • $begingroup$
    Are you sure this is working as intended?
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    The test reverseString("My age is 0, 0 si ega ym."); should at least be something like console.log(palindrome(reverseString("My age is 0, 0 si ega ym.")));, and does your challenge ignore spaces? Because if they don't, your example string should return false while it doesn't. Please clarify the exact challenge.
    $endgroup$
    – Mast
    9 hours ago






  • 1




    $begingroup$
    Sorry I updated it
    $endgroup$
    – DreamVision2017
    9 hours ago










  • $begingroup$
    Much better, thank you.
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    Np, let me know if there's anything else that needs to be changed
    $endgroup$
    – DreamVision2017
    9 hours ago













7












7








7





$begingroup$


I made a palindrome checker that's supposed to be designed to be simple and easy to read. Please let me know what you think. I believe the time complexity is $mathcalO(n)$ but I'm not too sure about that:



Challenge: You'll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything into the same case (lower or upper case) in order to check for palindromes.



function reverseString(str)
_/g, "").toLowerCase().split(" ").join("");
var array = [];
for(var i = str.length ; i >=0; i--)

array.push(str[i])

return(array.join(""));



reverseString("My age is 0, 0 si ega ym.");

function palindrome(str) _/g, "").toLowerCase().split(" ").join("");
if(str === reverseString(str))

return true;

else

return false;











share|improve this question











$endgroup$




I made a palindrome checker that's supposed to be designed to be simple and easy to read. Please let me know what you think. I believe the time complexity is $mathcalO(n)$ but I'm not too sure about that:



Challenge: You'll need to remove all non-alphanumeric characters (punctuation, spaces and symbols) and turn everything into the same case (lower or upper case) in order to check for palindromes.



function reverseString(str)
_/g, "").toLowerCase().split(" ").join("");
var array = [];
for(var i = str.length ; i >=0; i--)

array.push(str[i])

return(array.join(""));



reverseString("My age is 0, 0 si ega ym.");

function palindrome(str) _/g, "").toLowerCase().split(" ").join("");
if(str === reverseString(str))

return true;

else

return false;








javascript algorithm programming-challenge array palindrome






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited 5 hours ago









200_success

130k17156420




130k17156420










asked 9 hours ago









DreamVision2017DreamVision2017

614




614











  • $begingroup$
    Are you sure this is working as intended?
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    The test reverseString("My age is 0, 0 si ega ym."); should at least be something like console.log(palindrome(reverseString("My age is 0, 0 si ega ym.")));, and does your challenge ignore spaces? Because if they don't, your example string should return false while it doesn't. Please clarify the exact challenge.
    $endgroup$
    – Mast
    9 hours ago






  • 1




    $begingroup$
    Sorry I updated it
    $endgroup$
    – DreamVision2017
    9 hours ago










  • $begingroup$
    Much better, thank you.
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    Np, let me know if there's anything else that needs to be changed
    $endgroup$
    – DreamVision2017
    9 hours ago
















  • $begingroup$
    Are you sure this is working as intended?
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    The test reverseString("My age is 0, 0 si ega ym."); should at least be something like console.log(palindrome(reverseString("My age is 0, 0 si ega ym.")));, and does your challenge ignore spaces? Because if they don't, your example string should return false while it doesn't. Please clarify the exact challenge.
    $endgroup$
    – Mast
    9 hours ago






  • 1




    $begingroup$
    Sorry I updated it
    $endgroup$
    – DreamVision2017
    9 hours ago










  • $begingroup$
    Much better, thank you.
    $endgroup$
    – Mast
    9 hours ago










  • $begingroup$
    Np, let me know if there's anything else that needs to be changed
    $endgroup$
    – DreamVision2017
    9 hours ago















$begingroup$
Are you sure this is working as intended?
$endgroup$
– Mast
9 hours ago




$begingroup$
Are you sure this is working as intended?
$endgroup$
– Mast
9 hours ago












$begingroup$
The test reverseString("My age is 0, 0 si ega ym."); should at least be something like console.log(palindrome(reverseString("My age is 0, 0 si ega ym.")));, and does your challenge ignore spaces? Because if they don't, your example string should return false while it doesn't. Please clarify the exact challenge.
$endgroup$
– Mast
9 hours ago




$begingroup$
The test reverseString("My age is 0, 0 si ega ym."); should at least be something like console.log(palindrome(reverseString("My age is 0, 0 si ega ym.")));, and does your challenge ignore spaces? Because if they don't, your example string should return false while it doesn't. Please clarify the exact challenge.
$endgroup$
– Mast
9 hours ago




1




1




$begingroup$
Sorry I updated it
$endgroup$
– DreamVision2017
9 hours ago




$begingroup$
Sorry I updated it
$endgroup$
– DreamVision2017
9 hours ago












$begingroup$
Much better, thank you.
$endgroup$
– Mast
9 hours ago




$begingroup$
Much better, thank you.
$endgroup$
– Mast
9 hours ago












$begingroup$
Np, let me know if there's anything else that needs to be changed
$endgroup$
– DreamVision2017
9 hours ago




$begingroup$
Np, let me know if there's anything else that needs to be changed
$endgroup$
– DreamVision2017
9 hours ago










3 Answers
3






active

oldest

votes


















6












$begingroup$

Time complexity



Your time complexity is linear but you can save a few traversals over the string and lower the constant factor as you improve readability. Checking whether a string is a palindrome can be done in one pass with two pointers at each end of the string (plus some conditionals for your special characters), but this gains speed at the expense of readability; I'd encourage a round of clean-up before going for optimizations.



Repeated code



Repeated code harms maintainability and readability. Notice that the line



str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");


appears in two places in the code. If you decide to change one to accept a different regex but forget to change the other one, you've introduced a potentially subtle bug into your program. Move this to its own function to avoid duplication.



Use accurate function names and use builtins



reverseString is a confusing function: it does more than reversing a string as advertised: it also strips whitespace and punctuation, which would be very surprising if I called this function as a user of your library without knowing its internals. All functions should operate as black boxes that perform the task they claim to, nothing more or less.



The array prototype already has a reverse() function, so there's no need to write this out by hand.



Avoid unnecessary verbosity



The code:



 if(str === reverseString(str))

return true;

else

return false;



is clearer written as return str === reverseString(str);, which says "return the logical result of comparing str and its reversal".



Improve the regex to match your specification



Including spaces in your regex substitution to "" is easier than .split(" ").join(""). If you wish to remove all non-alphanumeric characters, a regex like /[^a-zd]/gi reflects your written specification accurately (or use W if you don't mind including underscores).



Style remarks



  • JS uses K&R braces instead of Allman by convention.

  • Add a blank line above for and if blocks to ease vertical congestion.

  • Add a space around keywords and operators like for( and >=0, which are clearer as for ( and >= 0.

  • No need for parentheses around a return value.


  • array.push(str[i]) is missing a semicolon.

  • CodeReview's snippet autoformatter will automatically do most of this for you.

Rewrite 1






const palindrome = str => 
str = str.replace(/[^a-zd]/gi, "").toLowerCase();
return str === str.split("").reverse().join("");
;

console.log(palindrome("My age is 0, 0 si ega ym."));





Rewrite 2: uglier, but faster



Benchmark






const palindrome = str => 
str = str.replace(/[^a-zd]/gi, "").toLowerCase();
let left = 0;
let right = str.length;

while (left < right)
if (str[left++] !== str[--right])
return false;



return true;
;

[
"",
"a",
"aba",
"racecar",
"racecar ",
" racecar",
" race car",
" r r a c e c a rr ",
".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
].forEach(test => console.log(palindrome(test)));

console.log();
[
"ab",
"abc",
"racecars",
"racescar",
" ra scecar",
" r sace car",
"a r r a c e c a rr ",
" r r a c e c a rr a",
".a .. r . ... . .$$$ $!aces ca r a",
].forEach(test => console.log(palindrome(test)));








share|improve this answer











$endgroup$












  • $begingroup$
    Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
    $endgroup$
    – DreamVision2017
    6 hours ago











  • $begingroup$
    Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
    $endgroup$
    – ggorlen
    6 hours ago










  • $begingroup$
    This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
    $endgroup$
    – Feathercrown
    3 hours ago











  • $begingroup$
    Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
    $endgroup$
    – cbojar
    3 hours ago






  • 1




    $begingroup$
    @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
    $endgroup$
    – ggorlen
    3 hours ago



















2












$begingroup$

Too much code.



  • You can return a boolean

Note that the positions of and



 if(str === reverseString(str)) 
return true;
else
return false;



Becomes



 return str === reverseString(str);


  • You can remove whites spaces and commas etc with regExp /W/g


  • Array has a reverse function which you can use rather than do it manually.


  • You should reverse the string in the function.


  • Strings are iterate-able so you can convert a string to an array with [...str]


Example



function isPalindrome(str) 
str = str.replace(/W/g,"").toLowerCase();
return str === [...str].reverse().join("");






share|improve this answer









$endgroup$












  • $begingroup$
    Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
    $endgroup$
    – DreamVision2017
    6 hours ago


















0












$begingroup$

The line to scrub punctuation and spaces could be simplified from:



str = str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");



to:



str = str.replace(/[^w]|_/g, "").toLowerCase();



Essentially, your original regex marks spaces as legal characters, which you're then going and later scrubbing out with .split(" ").join(""). By excluding the s in your regex, you cause the regex to match spaces in the string, which would then be replaced along with the punctuation in the str.replace method. See this regex101.



I'd also ask you to consider what it means to be a palindrome. Words like racecar. The way you're currently doing it is by reversing the string, and then checking equality. I suggest it could be half (worst case) or O(1) (best case) the complexity if you'd think about how you could check the front and the back of the string at the same time. I won't give you the code how to do this, but I'll outline the algorithm. Consider the word Urithiru, a faster way to check palindrome-ness would to be doing something like this: Take the first and last letters, compare them, if true, then grab the next in sequence (next from the start; next from reverse). Essentially the program would evaluate it in these steps:




  1. u == u: true


  2. r == r: true


  3. i == i: true


  4. t == h: false

Words like Urithiru and palindromes have the worst complexity cases for the algorithm because every letter must be checked to prove it's a palidrome. However, if you checked a work like supercalifragilisticexpialidocious, it'd only take two iterations, and then most words in the English language (the ones that don't start and end with the same letters), would be an O(1) result. For instance, English would fail after the first comparison.






share|improve this answer









$endgroup$













    Your Answer





    StackExchange.ifUsing("editor", function ()
    return StackExchange.using("mathjaxEditing", function ()
    StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix)
    StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
    );
    );
    , "mathjax-editing");

    StackExchange.ifUsing("editor", function ()
    StackExchange.using("externalEditor", function ()
    StackExchange.using("snippets", function ()
    StackExchange.snippets.init();
    );
    );
    , "code-snippets");

    StackExchange.ready(function()
    var channelOptions =
    tags: "".split(" "),
    id: "196"
    ;
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function()
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled)
    StackExchange.using("snippets", function()
    createEditor();
    );

    else
    createEditor();

    );

    function createEditor()
    StackExchange.prepareEditor(
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: false,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: null,
    bindNavPrevention: true,
    postfix: "",
    imageUploader:
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    ,
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    );



    );













    draft saved

    draft discarded


















    StackExchange.ready(
    function ()
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216534%2feasy-to-read-palindrome-checker%23new-answer', 'question_page');

    );

    Post as a guest















    Required, but never shown

























    3 Answers
    3






    active

    oldest

    votes








    3 Answers
    3






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    6












    $begingroup$

    Time complexity



    Your time complexity is linear but you can save a few traversals over the string and lower the constant factor as you improve readability. Checking whether a string is a palindrome can be done in one pass with two pointers at each end of the string (plus some conditionals for your special characters), but this gains speed at the expense of readability; I'd encourage a round of clean-up before going for optimizations.



    Repeated code



    Repeated code harms maintainability and readability. Notice that the line



    str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");


    appears in two places in the code. If you decide to change one to accept a different regex but forget to change the other one, you've introduced a potentially subtle bug into your program. Move this to its own function to avoid duplication.



    Use accurate function names and use builtins



    reverseString is a confusing function: it does more than reversing a string as advertised: it also strips whitespace and punctuation, which would be very surprising if I called this function as a user of your library without knowing its internals. All functions should operate as black boxes that perform the task they claim to, nothing more or less.



    The array prototype already has a reverse() function, so there's no need to write this out by hand.



    Avoid unnecessary verbosity



    The code:



     if(str === reverseString(str))

    return true;

    else

    return false;



    is clearer written as return str === reverseString(str);, which says "return the logical result of comparing str and its reversal".



    Improve the regex to match your specification



    Including spaces in your regex substitution to "" is easier than .split(" ").join(""). If you wish to remove all non-alphanumeric characters, a regex like /[^a-zd]/gi reflects your written specification accurately (or use W if you don't mind including underscores).



    Style remarks



    • JS uses K&R braces instead of Allman by convention.

    • Add a blank line above for and if blocks to ease vertical congestion.

    • Add a space around keywords and operators like for( and >=0, which are clearer as for ( and >= 0.

    • No need for parentheses around a return value.


    • array.push(str[i]) is missing a semicolon.

    • CodeReview's snippet autoformatter will automatically do most of this for you.

    Rewrite 1






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    return str === str.split("").reverse().join("");
    ;

    console.log(palindrome("My age is 0, 0 si ega ym."));





    Rewrite 2: uglier, but faster



    Benchmark






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    let left = 0;
    let right = str.length;

    while (left < right)
    if (str[left++] !== str[--right])
    return false;



    return true;
    ;

    [
    "",
    "a",
    "aba",
    "racecar",
    "racecar ",
    " racecar",
    " race car",
    " r r a c e c a rr ",
    ".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
    ].forEach(test => console.log(palindrome(test)));

    console.log();
    [
    "ab",
    "abc",
    "racecars",
    "racescar",
    " ra scecar",
    " r sace car",
    "a r r a c e c a rr ",
    " r r a c e c a rr a",
    ".a .. r . ... . .$$$ $!aces ca r a",
    ].forEach(test => console.log(palindrome(test)));








    share|improve this answer











    $endgroup$












    • $begingroup$
      Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
      $endgroup$
      – DreamVision2017
      6 hours ago











    • $begingroup$
      Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
      $endgroup$
      – ggorlen
      6 hours ago










    • $begingroup$
      This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
      $endgroup$
      – Feathercrown
      3 hours ago











    • $begingroup$
      Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
      $endgroup$
      – cbojar
      3 hours ago






    • 1




      $begingroup$
      @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
      $endgroup$
      – ggorlen
      3 hours ago
















    6












    $begingroup$

    Time complexity



    Your time complexity is linear but you can save a few traversals over the string and lower the constant factor as you improve readability. Checking whether a string is a palindrome can be done in one pass with two pointers at each end of the string (plus some conditionals for your special characters), but this gains speed at the expense of readability; I'd encourage a round of clean-up before going for optimizations.



    Repeated code



    Repeated code harms maintainability and readability. Notice that the line



    str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");


    appears in two places in the code. If you decide to change one to accept a different regex but forget to change the other one, you've introduced a potentially subtle bug into your program. Move this to its own function to avoid duplication.



    Use accurate function names and use builtins



    reverseString is a confusing function: it does more than reversing a string as advertised: it also strips whitespace and punctuation, which would be very surprising if I called this function as a user of your library without knowing its internals. All functions should operate as black boxes that perform the task they claim to, nothing more or less.



    The array prototype already has a reverse() function, so there's no need to write this out by hand.



    Avoid unnecessary verbosity



    The code:



     if(str === reverseString(str))

    return true;

    else

    return false;



    is clearer written as return str === reverseString(str);, which says "return the logical result of comparing str and its reversal".



    Improve the regex to match your specification



    Including spaces in your regex substitution to "" is easier than .split(" ").join(""). If you wish to remove all non-alphanumeric characters, a regex like /[^a-zd]/gi reflects your written specification accurately (or use W if you don't mind including underscores).



    Style remarks



    • JS uses K&R braces instead of Allman by convention.

    • Add a blank line above for and if blocks to ease vertical congestion.

    • Add a space around keywords and operators like for( and >=0, which are clearer as for ( and >= 0.

    • No need for parentheses around a return value.


    • array.push(str[i]) is missing a semicolon.

    • CodeReview's snippet autoformatter will automatically do most of this for you.

    Rewrite 1






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    return str === str.split("").reverse().join("");
    ;

    console.log(palindrome("My age is 0, 0 si ega ym."));





    Rewrite 2: uglier, but faster



    Benchmark






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    let left = 0;
    let right = str.length;

    while (left < right)
    if (str[left++] !== str[--right])
    return false;



    return true;
    ;

    [
    "",
    "a",
    "aba",
    "racecar",
    "racecar ",
    " racecar",
    " race car",
    " r r a c e c a rr ",
    ".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
    ].forEach(test => console.log(palindrome(test)));

    console.log();
    [
    "ab",
    "abc",
    "racecars",
    "racescar",
    " ra scecar",
    " r sace car",
    "a r r a c e c a rr ",
    " r r a c e c a rr a",
    ".a .. r . ... . .$$$ $!aces ca r a",
    ].forEach(test => console.log(palindrome(test)));








    share|improve this answer











    $endgroup$












    • $begingroup$
      Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
      $endgroup$
      – DreamVision2017
      6 hours ago











    • $begingroup$
      Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
      $endgroup$
      – ggorlen
      6 hours ago










    • $begingroup$
      This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
      $endgroup$
      – Feathercrown
      3 hours ago











    • $begingroup$
      Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
      $endgroup$
      – cbojar
      3 hours ago






    • 1




      $begingroup$
      @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
      $endgroup$
      – ggorlen
      3 hours ago














    6












    6








    6





    $begingroup$

    Time complexity



    Your time complexity is linear but you can save a few traversals over the string and lower the constant factor as you improve readability. Checking whether a string is a palindrome can be done in one pass with two pointers at each end of the string (plus some conditionals for your special characters), but this gains speed at the expense of readability; I'd encourage a round of clean-up before going for optimizations.



    Repeated code



    Repeated code harms maintainability and readability. Notice that the line



    str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");


    appears in two places in the code. If you decide to change one to accept a different regex but forget to change the other one, you've introduced a potentially subtle bug into your program. Move this to its own function to avoid duplication.



    Use accurate function names and use builtins



    reverseString is a confusing function: it does more than reversing a string as advertised: it also strips whitespace and punctuation, which would be very surprising if I called this function as a user of your library without knowing its internals. All functions should operate as black boxes that perform the task they claim to, nothing more or less.



    The array prototype already has a reverse() function, so there's no need to write this out by hand.



    Avoid unnecessary verbosity



    The code:



     if(str === reverseString(str))

    return true;

    else

    return false;



    is clearer written as return str === reverseString(str);, which says "return the logical result of comparing str and its reversal".



    Improve the regex to match your specification



    Including spaces in your regex substitution to "" is easier than .split(" ").join(""). If you wish to remove all non-alphanumeric characters, a regex like /[^a-zd]/gi reflects your written specification accurately (or use W if you don't mind including underscores).



    Style remarks



    • JS uses K&R braces instead of Allman by convention.

    • Add a blank line above for and if blocks to ease vertical congestion.

    • Add a space around keywords and operators like for( and >=0, which are clearer as for ( and >= 0.

    • No need for parentheses around a return value.


    • array.push(str[i]) is missing a semicolon.

    • CodeReview's snippet autoformatter will automatically do most of this for you.

    Rewrite 1






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    return str === str.split("").reverse().join("");
    ;

    console.log(palindrome("My age is 0, 0 si ega ym."));





    Rewrite 2: uglier, but faster



    Benchmark






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    let left = 0;
    let right = str.length;

    while (left < right)
    if (str[left++] !== str[--right])
    return false;



    return true;
    ;

    [
    "",
    "a",
    "aba",
    "racecar",
    "racecar ",
    " racecar",
    " race car",
    " r r a c e c a rr ",
    ".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
    ].forEach(test => console.log(palindrome(test)));

    console.log();
    [
    "ab",
    "abc",
    "racecars",
    "racescar",
    " ra scecar",
    " r sace car",
    "a r r a c e c a rr ",
    " r r a c e c a rr a",
    ".a .. r . ... . .$$$ $!aces ca r a",
    ].forEach(test => console.log(palindrome(test)));








    share|improve this answer











    $endgroup$



    Time complexity



    Your time complexity is linear but you can save a few traversals over the string and lower the constant factor as you improve readability. Checking whether a string is a palindrome can be done in one pass with two pointers at each end of the string (plus some conditionals for your special characters), but this gains speed at the expense of readability; I'd encourage a round of clean-up before going for optimizations.



    Repeated code



    Repeated code harms maintainability and readability. Notice that the line



    str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");


    appears in two places in the code. If you decide to change one to accept a different regex but forget to change the other one, you've introduced a potentially subtle bug into your program. Move this to its own function to avoid duplication.



    Use accurate function names and use builtins



    reverseString is a confusing function: it does more than reversing a string as advertised: it also strips whitespace and punctuation, which would be very surprising if I called this function as a user of your library without knowing its internals. All functions should operate as black boxes that perform the task they claim to, nothing more or less.



    The array prototype already has a reverse() function, so there's no need to write this out by hand.



    Avoid unnecessary verbosity



    The code:



     if(str === reverseString(str))

    return true;

    else

    return false;



    is clearer written as return str === reverseString(str);, which says "return the logical result of comparing str and its reversal".



    Improve the regex to match your specification



    Including spaces in your regex substitution to "" is easier than .split(" ").join(""). If you wish to remove all non-alphanumeric characters, a regex like /[^a-zd]/gi reflects your written specification accurately (or use W if you don't mind including underscores).



    Style remarks



    • JS uses K&R braces instead of Allman by convention.

    • Add a blank line above for and if blocks to ease vertical congestion.

    • Add a space around keywords and operators like for( and >=0, which are clearer as for ( and >= 0.

    • No need for parentheses around a return value.


    • array.push(str[i]) is missing a semicolon.

    • CodeReview's snippet autoformatter will automatically do most of this for you.

    Rewrite 1






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    return str === str.split("").reverse().join("");
    ;

    console.log(palindrome("My age is 0, 0 si ega ym."));





    Rewrite 2: uglier, but faster



    Benchmark






    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    let left = 0;
    let right = str.length;

    while (left < right)
    if (str[left++] !== str[--right])
    return false;



    return true;
    ;

    [
    "",
    "a",
    "aba",
    "racecar",
    "racecar ",
    " racecar",
    " race car",
    " r r a c e c a rr ",
    ".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
    ].forEach(test => console.log(palindrome(test)));

    console.log();
    [
    "ab",
    "abc",
    "racecars",
    "racescar",
    " ra scecar",
    " r sace car",
    "a r r a c e c a rr ",
    " r r a c e c a rr a",
    ".a .. r . ... . .$$$ $!aces ca r a",
    ].forEach(test => console.log(palindrome(test)));








    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    return str === str.split("").reverse().join("");
    ;

    console.log(palindrome("My age is 0, 0 si ega ym."));





    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    return str === str.split("").reverse().join("");
    ;

    console.log(palindrome("My age is 0, 0 si ega ym."));





    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    let left = 0;
    let right = str.length;

    while (left < right)
    if (str[left++] !== str[--right])
    return false;



    return true;
    ;

    [
    "",
    "a",
    "aba",
    "racecar",
    "racecar ",
    " racecar",
    " race car",
    " r r a c e c a rr ",
    ".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
    ].forEach(test => console.log(palindrome(test)));

    console.log();
    [
    "ab",
    "abc",
    "racecars",
    "racescar",
    " ra scecar",
    " r sace car",
    "a r r a c e c a rr ",
    " r r a c e c a rr a",
    ".a .. r . ... . .$$$ $!aces ca r a",
    ].forEach(test => console.log(palindrome(test)));





    const palindrome = str => 
    str = str.replace(/[^a-zd]/gi, "").toLowerCase();
    let left = 0;
    let right = str.length;

    while (left < right)
    if (str[left++] !== str[--right])
    return false;



    return true;
    ;

    [
    "",
    "a",
    "aba",
    "racecar",
    "racecar ",
    " racecar",
    " race car",
    " r r a c e c a rr ",
    ".a .. r . ... . .9f08e988-1e35-4dc6-a24a-5c7e03bce5ba$ $!ace ca r3 a",
    ].forEach(test => console.log(palindrome(test)));

    console.log();
    [
    "ab",
    "abc",
    "racecars",
    "racescar",
    " ra scecar",
    " r sace car",
    "a r r a c e c a rr ",
    " r r a c e c a rr a",
    ".a .. r . ... . .$$$ $!aces ca r a",
    ].forEach(test => console.log(palindrome(test)));






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited 1 hour ago

























    answered 7 hours ago









    ggorlenggorlen

    443111




    443111











    • $begingroup$
      Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
      $endgroup$
      – DreamVision2017
      6 hours ago











    • $begingroup$
      Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
      $endgroup$
      – ggorlen
      6 hours ago










    • $begingroup$
      This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
      $endgroup$
      – Feathercrown
      3 hours ago











    • $begingroup$
      Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
      $endgroup$
      – cbojar
      3 hours ago






    • 1




      $begingroup$
      @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
      $endgroup$
      – ggorlen
      3 hours ago

















    • $begingroup$
      Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
      $endgroup$
      – DreamVision2017
      6 hours ago











    • $begingroup$
      Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
      $endgroup$
      – ggorlen
      6 hours ago










    • $begingroup$
      This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
      $endgroup$
      – Feathercrown
      3 hours ago











    • $begingroup$
      Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
      $endgroup$
      – cbojar
      3 hours ago






    • 1




      $begingroup$
      @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
      $endgroup$
      – ggorlen
      3 hours ago
















    $begingroup$
    Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
    $endgroup$
    – DreamVision2017
    6 hours ago





    $begingroup$
    Good points, just to make sure is the time complexity O(n) because the reverse function traverses through each element of the array?
    $endgroup$
    – DreamVision2017
    6 hours ago













    $begingroup$
    Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
    $endgroup$
    – ggorlen
    6 hours ago




    $begingroup$
    Your code makes ~11 trips over the n-sized input, which is why I mention the high constant factor. If you do the replacement and lowercasing one time, you can get away with about 6 trips through the input. I count any array function, loop or === as one trip over the input. This is a pretty minor concern relative to the other points, though, and addressing the style points accidentally improves your performance along the way.
    $endgroup$
    – ggorlen
    6 hours ago












    $begingroup$
    This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
    $endgroup$
    – Feathercrown
    3 hours ago





    $begingroup$
    This is pretty much exactly what I was thinking as I read it. It's weird just how much more compressed everything gets.... Anyways, wouldn't it be better to add a .split() to the first line so the last could be simply return str === str.reverse();?
    $endgroup$
    – Feathercrown
    3 hours ago













    $begingroup$
    Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
    $endgroup$
    – cbojar
    3 hours ago




    $begingroup$
    Small optimization for your rewrite, lowercase the string first and avoid the additional cost of a case-insensitive regex. There are larger optimizations that could also be done, but that make the code more complicated.
    $endgroup$
    – cbojar
    3 hours ago




    1




    1




    $begingroup$
    @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
    $endgroup$
    – ggorlen
    3 hours ago





    $begingroup$
    @Feathercrown ==/=== doesn't work on arrays, unfortunately, but good thought.
    $endgroup$
    – ggorlen
    3 hours ago














    2












    $begingroup$

    Too much code.



    • You can return a boolean

    Note that the positions of and



     if(str === reverseString(str)) 
    return true;
    else
    return false;



    Becomes



     return str === reverseString(str);


    • You can remove whites spaces and commas etc with regExp /W/g


    • Array has a reverse function which you can use rather than do it manually.


    • You should reverse the string in the function.


    • Strings are iterate-able so you can convert a string to an array with [...str]


    Example



    function isPalindrome(str) 
    str = str.replace(/W/g,"").toLowerCase();
    return str === [...str].reverse().join("");






    share|improve this answer









    $endgroup$












    • $begingroup$
      Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
      $endgroup$
      – DreamVision2017
      6 hours ago















    2












    $begingroup$

    Too much code.



    • You can return a boolean

    Note that the positions of and



     if(str === reverseString(str)) 
    return true;
    else
    return false;



    Becomes



     return str === reverseString(str);


    • You can remove whites spaces and commas etc with regExp /W/g


    • Array has a reverse function which you can use rather than do it manually.


    • You should reverse the string in the function.


    • Strings are iterate-able so you can convert a string to an array with [...str]


    Example



    function isPalindrome(str) 
    str = str.replace(/W/g,"").toLowerCase();
    return str === [...str].reverse().join("");






    share|improve this answer









    $endgroup$












    • $begingroup$
      Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
      $endgroup$
      – DreamVision2017
      6 hours ago













    2












    2








    2





    $begingroup$

    Too much code.



    • You can return a boolean

    Note that the positions of and



     if(str === reverseString(str)) 
    return true;
    else
    return false;



    Becomes



     return str === reverseString(str);


    • You can remove whites spaces and commas etc with regExp /W/g


    • Array has a reverse function which you can use rather than do it manually.


    • You should reverse the string in the function.


    • Strings are iterate-able so you can convert a string to an array with [...str]


    Example



    function isPalindrome(str) 
    str = str.replace(/W/g,"").toLowerCase();
    return str === [...str].reverse().join("");






    share|improve this answer









    $endgroup$



    Too much code.



    • You can return a boolean

    Note that the positions of and



     if(str === reverseString(str)) 
    return true;
    else
    return false;



    Becomes



     return str === reverseString(str);


    • You can remove whites spaces and commas etc with regExp /W/g


    • Array has a reverse function which you can use rather than do it manually.


    • You should reverse the string in the function.


    • Strings are iterate-able so you can convert a string to an array with [...str]


    Example



    function isPalindrome(str) 
    str = str.replace(/W/g,"").toLowerCase();
    return str === [...str].reverse().join("");







    share|improve this answer












    share|improve this answer



    share|improve this answer










    answered 7 hours ago









    Blindman67Blindman67

    9,0911621




    9,0911621











    • $begingroup$
      Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
      $endgroup$
      – DreamVision2017
      6 hours ago
















    • $begingroup$
      Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
      $endgroup$
      – DreamVision2017
      6 hours ago















    $begingroup$
    Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
    $endgroup$
    – DreamVision2017
    6 hours ago




    $begingroup$
    Ah I see, btw I tried to code from scratch as much as possible to get better at problem solving/ programming. Although you are right that there are many JS methods that would make it easier to implement a solution.
    $endgroup$
    – DreamVision2017
    6 hours ago











    0












    $begingroup$

    The line to scrub punctuation and spaces could be simplified from:



    str = str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");



    to:



    str = str.replace(/[^w]|_/g, "").toLowerCase();



    Essentially, your original regex marks spaces as legal characters, which you're then going and later scrubbing out with .split(" ").join(""). By excluding the s in your regex, you cause the regex to match spaces in the string, which would then be replaced along with the punctuation in the str.replace method. See this regex101.



    I'd also ask you to consider what it means to be a palindrome. Words like racecar. The way you're currently doing it is by reversing the string, and then checking equality. I suggest it could be half (worst case) or O(1) (best case) the complexity if you'd think about how you could check the front and the back of the string at the same time. I won't give you the code how to do this, but I'll outline the algorithm. Consider the word Urithiru, a faster way to check palindrome-ness would to be doing something like this: Take the first and last letters, compare them, if true, then grab the next in sequence (next from the start; next from reverse). Essentially the program would evaluate it in these steps:




    1. u == u: true


    2. r == r: true


    3. i == i: true


    4. t == h: false

    Words like Urithiru and palindromes have the worst complexity cases for the algorithm because every letter must be checked to prove it's a palidrome. However, if you checked a work like supercalifragilisticexpialidocious, it'd only take two iterations, and then most words in the English language (the ones that don't start and end with the same letters), would be an O(1) result. For instance, English would fail after the first comparison.






    share|improve this answer









    $endgroup$

















      0












      $begingroup$

      The line to scrub punctuation and spaces could be simplified from:



      str = str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");



      to:



      str = str.replace(/[^w]|_/g, "").toLowerCase();



      Essentially, your original regex marks spaces as legal characters, which you're then going and later scrubbing out with .split(" ").join(""). By excluding the s in your regex, you cause the regex to match spaces in the string, which would then be replaced along with the punctuation in the str.replace method. See this regex101.



      I'd also ask you to consider what it means to be a palindrome. Words like racecar. The way you're currently doing it is by reversing the string, and then checking equality. I suggest it could be half (worst case) or O(1) (best case) the complexity if you'd think about how you could check the front and the back of the string at the same time. I won't give you the code how to do this, but I'll outline the algorithm. Consider the word Urithiru, a faster way to check palindrome-ness would to be doing something like this: Take the first and last letters, compare them, if true, then grab the next in sequence (next from the start; next from reverse). Essentially the program would evaluate it in these steps:




      1. u == u: true


      2. r == r: true


      3. i == i: true


      4. t == h: false

      Words like Urithiru and palindromes have the worst complexity cases for the algorithm because every letter must be checked to prove it's a palidrome. However, if you checked a work like supercalifragilisticexpialidocious, it'd only take two iterations, and then most words in the English language (the ones that don't start and end with the same letters), would be an O(1) result. For instance, English would fail after the first comparison.






      share|improve this answer









      $endgroup$















        0












        0








        0





        $begingroup$

        The line to scrub punctuation and spaces could be simplified from:



        str = str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");



        to:



        str = str.replace(/[^w]|_/g, "").toLowerCase();



        Essentially, your original regex marks spaces as legal characters, which you're then going and later scrubbing out with .split(" ").join(""). By excluding the s in your regex, you cause the regex to match spaces in the string, which would then be replaced along with the punctuation in the str.replace method. See this regex101.



        I'd also ask you to consider what it means to be a palindrome. Words like racecar. The way you're currently doing it is by reversing the string, and then checking equality. I suggest it could be half (worst case) or O(1) (best case) the complexity if you'd think about how you could check the front and the back of the string at the same time. I won't give you the code how to do this, but I'll outline the algorithm. Consider the word Urithiru, a faster way to check palindrome-ness would to be doing something like this: Take the first and last letters, compare them, if true, then grab the next in sequence (next from the start; next from reverse). Essentially the program would evaluate it in these steps:




        1. u == u: true


        2. r == r: true


        3. i == i: true


        4. t == h: false

        Words like Urithiru and palindromes have the worst complexity cases for the algorithm because every letter must be checked to prove it's a palidrome. However, if you checked a work like supercalifragilisticexpialidocious, it'd only take two iterations, and then most words in the English language (the ones that don't start and end with the same letters), would be an O(1) result. For instance, English would fail after the first comparison.






        share|improve this answer









        $endgroup$



        The line to scrub punctuation and spaces could be simplified from:



        str = str.replace(/[^ws]|_/g, "").toLowerCase().split(" ").join("");



        to:



        str = str.replace(/[^w]|_/g, "").toLowerCase();



        Essentially, your original regex marks spaces as legal characters, which you're then going and later scrubbing out with .split(" ").join(""). By excluding the s in your regex, you cause the regex to match spaces in the string, which would then be replaced along with the punctuation in the str.replace method. See this regex101.



        I'd also ask you to consider what it means to be a palindrome. Words like racecar. The way you're currently doing it is by reversing the string, and then checking equality. I suggest it could be half (worst case) or O(1) (best case) the complexity if you'd think about how you could check the front and the back of the string at the same time. I won't give you the code how to do this, but I'll outline the algorithm. Consider the word Urithiru, a faster way to check palindrome-ness would to be doing something like this: Take the first and last letters, compare them, if true, then grab the next in sequence (next from the start; next from reverse). Essentially the program would evaluate it in these steps:




        1. u == u: true


        2. r == r: true


        3. i == i: true


        4. t == h: false

        Words like Urithiru and palindromes have the worst complexity cases for the algorithm because every letter must be checked to prove it's a palidrome. However, if you checked a work like supercalifragilisticexpialidocious, it'd only take two iterations, and then most words in the English language (the ones that don't start and end with the same letters), would be an O(1) result. For instance, English would fail after the first comparison.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered 5 hours ago









        user138741user138741

        1534




        1534



























            draft saved

            draft discarded
















































            Thanks for contributing an answer to Code Review Stack Exchange!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid


            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.

            Use MathJax to format equations. MathJax reference.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function ()
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fcodereview.stackexchange.com%2fquestions%2f216534%2feasy-to-read-palindrome-checker%23new-answer', 'question_page');

            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Styletc

            Tórshavn Kliima | Partnerstääden | Luke uk diar | Nawigatsjuun62° 1′ N, 6° 46′ W62° 1′ 0″ N, 6° 46′ 0″ WWMOTórshavn