Kaksi tapaa tarkistaa palindromit JavaScriptissä

Tämä artikkeli perustuu Free Code Camp Basic Algorithm Scripting "Check for Palindromes" -ohjelmaan.

Palindromi on sana, lause, luku tai muu merkkijono, joka lukee samaa taaksepäin tai eteenpäin. Sanan "palindromi" keksi ensimmäisen kerran englantilainen näytelmäkirjailija Ben Jonson 1700-luvulla kreikkalaisista juurista palin ("jälleen") ja dromos ("tie, suunta"). - src. Wikipedia

Tässä artikkelissa aion selittää kaksi lähestymistapaa, ensin sisäänrakennetuilla toiminnoilla ja toisena for for -silmukalla.

Algoritmihaaste

Palauta tosi, jos annettu merkkijono on palindromi. Muussa tapauksessa palauta väärä.

Palindromi on sana tai lause, joka kirjoitetaan samalla tavalla sekä eteenpäin että taaksepäin, välittämättä välimerkit, kirjaimet ja välit.

Merkintä. Sinun on poistettava kaikki ei-aakkosnumeeriset merkit (välimerkit, välilyönnit ja symbolit) ja käännettävä kaikki pienet kirjaimet palindromien löytämiseksi.

Ohitamme merkkijonot vaihtelevissa muodoissa, kuten "racecar", "RaceCar" ja "race CAR".

function palindrome(str) { return true; } palindrome("eye");

Annetut testitapaukset

  • palindromin (“kilpa-auto”) pitäisi palata totta
  • palindromi ("ei palindromi")pitäisi palauttaa väärä
  • palindromin ("Mies, suunnitelma, kanava. Panama") pitäisi palata totta
  • palindromin ("ei koskaan pariton tai parillinen") pitäisi palata totta
  • palindromin (“nope”) pitäisi palauttaa väärä
  • palindromin (“lähesomla”) pitäisi palauttaa väärä
  • palindromin (“Ikäni on 0, 0 si ega ym.”) pitäisi palata totta
  • palindromin ("1 silmä yhdelle silmälle") pitäisi palauttaa väärä
  • palindromin (“0_0 (: / - \ :) 0–0”) pitäisi palata tosi

Minkä säännöllisen lausekkeen meidän on läpäistävä viimeinen testitapaus?

Säännölliset lausekkeet ovat malleja, joita käytetään merkkijonoyhdistelmien sovittamiseen.

Kun vastaavuuden haku vaatii jotain muuta kuin suoraa osumaa, kuvio sisältää erikoismerkkejä.

To pass the last test case, we can use two Regular Expressions: /[^A-Za-z0–9]/g or /[\W_]/g

\ W poistaa kaikki ei-aakkosnumeeriset merkit :

  • \ W vastaa mitä tahansa ei-sanamerkkiä
  • \ W vastaa [^ A-Za-z0–9_]
  • \ W vastaa mitä tahansa, joka ei ole suluissa

Mitä tuo tarkoittaa?

[^A-Z] matches anything that is not enclosed between A and Z [^a-z] matches anything that is not enclosed between a and z [^0-9] matches anything that is not enclosed between 0 and 9 [^_] matches anything that does not enclose _

Mutta testitapauksessamme tarvitsemme palindromin (“ 0_0 (: / - \ :) 0–0 ”) palataksesi tosi , mikä tarkoittaa, että ” _ (: / - \ :) - ” on sovitettava yhteen.

Meidän on lisättävä " _ " tämän testitapauksen läpäisemiseksi.

We now have “\W_”

Meidän on myös lisättävä g- lippu maailmanlaajuiseen hakuun.

We finally have “/[\W_]/g”
/ [\ W _] / g: tä käytettiin puhtaaseen esittelytarkoitukseen osoittamaan, miten RegExp toimii. / [^ A-Za-z0–9] / g on helpoin valita RegExp .

1. Tarkista palindromit, joissa on sisäänrakennetut toiminnot

Tässä ratkaisussa käytämme useita menetelmiä:

  • ToLowerCase () tapa palauttaa soittavalle merkkijonoarvoksi muunnetaan pieniksi.
  • Korvaa () menetelmä palauttaa uuden merkkijonon joidenkin tai kaikkien ottelut kuvio korvattu korvaamisesta. Käytämme yhtä aiemmin luomaasi RegExp-ohjelmaa.
  • Split () menetelmä jakaa String esine merkkijonojen joukko erottamalla merkkijonon osa jousille.
  • Taaksepäin () menetelmä kääntää matriisin paikallaan. Ensimmäisestä taulukkoelementistä tulee viimeinen ja viimeisestä ensimmäinen.
  • Liittyä () menetelmä liittyy kaikkien osien joukko tulee merkkijono.
function palindrome(str) { // Step 1. Lowercase the string and use the RegExp to remove unwanted characters from it var re = /[\W_]/g; // or var re = /[^A-Za-z0-9]/g; var lowRegStr = str.toLowerCase().replace(re, ''); // str.toLowerCase() = "A man, a plan, a canal. Panama".toLowerCase() = "a man, a plan, a canal. panama" // str.replace(/[\W_]/g, '') = "a man, a plan, a canal. panama".replace(/[\W_]/g, '') = "amanaplanacanalpanama" // var lowRegStr = "amanaplanacanalpanama"; // Step 2. Use the same chaining methods with built-in functions from the previous article 'Three Ways to Reverse a String in JavaScript' var reverseStr = lowRegStr.split('').reverse().join(''); // lowRegStr.split('') = "amanaplanacanalpanama".split('') = ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"] // ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"].reverse() = ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"] // ["a", "m", "a", "n", "a", "p", "l", "a", "n", "a", "c", "a", "n", "a", "l", "p", "a", "n", "a", "m", "a"].join('') = "amanaplanacanalpanama" // So, "amanaplanacanalpanama".split('').reverse().join('') = "amanaplanacanalpanama"; // And, var reverseStr = "amanaplanacanalpanama"; // Step 3. Check if reverseStr is strictly equals to lowRegStr and return a Boolean return reverseStr === lowRegStr; // "amanaplanacanalpanama" === "amanaplanacanalpanama"? => true } palindrome("A man, a plan, a canal. Panama");

Ilman kommentteja:

function palindrome(str) { var re = /[\W_]/g; var lowRegStr = str.toLowerCase().replace(re, ''); var reverseStr = lowRegStr.split('').reverse().join(''); return reverseStr === lowRegStr; } palindrome("A man, a plan, a canal. Panama");

2. Tarkista palindromit FOR-silmukalla

Puoli-indeksoinnilla (len / 2) on etuja käsiteltäessä suuria merkkijonoja. Tarkistamme lopun jokaisesta osasta ja jaamme FOR-silmukan sisällä olevien iteraatioiden määrän kahdella.

function palindrome(str) { // Step 1. The first part is the same as earlier var re = /[^A-Za-z0-9]/g; // or var re = /[\W_]/g; str = str.toLowerCase().replace(re, ''); // Step 2. Create the FOR loop var len = str.length; // var len = "A man, a plan, a canal. Panama".length = 30 for (var i = 0; i < len/2; i++) { if (str[i] !== str[len - 1 - i]) { // As long as the characters from each part match, the FOR loop will go on return false; // When the characters don't match anymore, false is returned and we exit the FOR loop } /* Here len/2 = 15 For each iteration: i = ? i  if("a" !== "a")? // false 2nd iteration: 1 yes 2 if(str[1] !== str[15 - 1 - 1])? => if("m" !== "m")? // false 3rd iteration: 2 yes 3 if(str[2] !== str[15 - 1 - 2])? => if("a" !== "a")? // false 4th iteration: 3 yes 4 if(str[3] !== str[15 - 1 - 3])? => if("n" !== "n")? // false 5th iteration: 4 yes 5 if(str[4] !== str[15 - 1 - 4])? => if("a" !== "a")? // false 6th iteration: 5 yes 6 if(str[5] !== str[15 - 1 - 5])? => if("p" !== "p")? // false 7th iteration: 6 yes 7 if(str[6] !== str[15 - 1 - 6])? => if("l" !== "l")? // false 8th iteration: 7 yes 8 if(str[7] !== str[15 - 1 - 7])? => if("a" !== "a")? // false 9th iteration: 8 yes 9 if(str[8] !== str[15 - 1 - 8])? => if("n" !== "n")? // false 10th iteration: 9 yes 10 if(str[9] !== str[15 - 1 - 9])? => if("a" !== "a")? // false 11th iteration: 10 yes 11 if(str[10] !== str[15 - 1 - 10])? => if("c" !== "c")? // false 12th iteration: 11 yes 12 if(str[11] !== str[15 - 1 - 11])? => if("a" !== "a")? // false 13th iteration: 12 yes 13 if(str[12] !== str[15 - 1 - 12])? => if("n" !== "n")? // false 14th iteration: 13 yes 14 if(str[13] !== str[15 - 1 - 13])? => if("a" !== "a")? // false 15th iteration: 14 yes 15 if(str[14] !== str[15 - 1 - 14])? => if("l" !== "l")? // false 16th iteration: 15 no End of the FOR Loop*/ } return true; // Both parts are strictly equal, it returns true => The string is a palindrome } palindrome("A man, a plan, a canal. Panama");

Ilman kommentteja:

function palindrome(str) { var re = /[^A-Za-z0-9]/g; str = str.toLowerCase().replace(re, ''); var len = str.length; for (var i = 0; i < len/2; i++) { if (str[i] !== str[len - 1 - i]) { return false; } } return true; } palindrome("A man, a plan, a canal. Panama");

I hope you found this helpful. This is part of my “How to Solve FCC Algorithms” series of articles on the Free Code Camp Algorithm Challenges, where I propose several solutions and explain step-by-step what happens under the hood.

Two ways to confirm the ending of a String in JavaScript

In this article, I’ll explain how to solve freeCodeCamp’s “Confirm the Ending” challenge.

Three Ways to Reverse a String in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Reverse a String”

Three Ways to Factorialize a Number in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Factorialize a Number”

Three Ways to Find the Longest Word in a String in JavaScript

This article is based on Free Code Camp Basic Algorithm Scripting “Find the Longest Word in a String”.

Three Ways to Title Case a Sentence in JavaScript

Tämä artikkeli perustuu Free Code Camp Basic Algorithm Scripting "Title Case a Sentence" -sarjaan.

Kolme tapaa löytää suurin joukko joukkoa JavaScriptin avulla

Tässä artikkelissa aion selittää kuinka ratkaista Free Code Campin "Palauta suurimmat numerot matriiseissa" -haaste. Tämä…

Jos sinulla on oma ratkaisusi tai ehdotuksia, jaa ne alla kommenteissa.

Tai voit seurata minua Mediumissa , Twitterissä, Githubissa ja LinkedInissä heti, kun napsautat vihreää sydäntä alla ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Resurssit

  • Säännölliset lausekkeet - MDN
  • toLowerCase () -menetelmä - MDN
  • korvaa () - MDN
  • split () menetelmä - MDN
  • käänteinen () menetelmä - MDN
  • join () menetelmä - MDN
  • Merkkijono. Pituus - MDN
  • puolesta - MDN