Kaks viisi palindroomide kontrollimiseks JavaScripti abil

See artikkel põhineb Free Code Campi algoritmi skriptimisel „Kontrolli palindroome”.

Palindroom on sõna, fraas, number või muu tähemärkide jada, mis loeb sama tahapoole või edasi. Sõna “palindroom” lõi inglise näitekirjanik Ben Jonson esmakordselt 17. sajandil Kreeka juurtest palin (“jälle”) ja dromos (“viis, suund”). - src. Vikipeedia

Selles artiklis selgitan kahte lähenemisviisi, esiteks sisseehitatud funktsioonidega ja teiseks for for loopiga.

Algoritmi väljakutse

Tagastage väärtus true, kui antud string on palindroom. Vastasel juhul tagastage vale.

Palindroom on sõna või lause, mis on kirjutatud ühtemoodi nii edasi kui ka tagasi, ignoreerides kirjavahemärke, suurtähti ja tühikuid.

Märge. Palindroomide kontrollimiseks peate eemaldama kõik mittetähelised numbrid (kirjavahemärgid, tühikud ja sümbolid) ning pöörama kõik väiketähtedega.

Anname teiste hulgas läbi erineva formaadiga stringe, nagu „võidusõiduauto“, „RaceCar“ ja „võidusõiduauto“.

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

Pakutakse testjuhtumeid

  • palindroom (võistlusauto) peaks tagasi tulema
  • palindroom (mitte palindroom)peaks tagastama vale
  • palindroom (“Mees, plaan, kanal. Panama”) peaks tagasi tulema
  • palindroom ("pole kunagi paaritu ega paaris") peaks tagasi tulema
  • palindroom (“nope”) peaks tagastama vale
  • palindroom (“peaaeguomla”) peaks tagastama vale
  • palindroom (“Minu vanus on 0, 0 si ega ym.”) peaks tagasi tulema
  • palindroom (“1 silm ühe silma kohta”) peaks tagastama vale
  • palindroom (“0_0 (: / - \ :) 0–0”) peaks olema tõene

Millist tavaväljendit vajame viimase testjuhtumi läbimiseks?

Regulaaravaldised on mustrid, mida kasutatakse stringide märgikombinatsioonide sobitamiseks.

Kui vaste otsimine nõuab midagi muud kui otsene vaste, sisaldab muster erimärke.

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

\ W eemaldab kõik mittetähelised numbrid :

  • \ W sobib mis tahes muu kui sõna sõnaga
  • \ W vastab ekvivalendile [^ A-Za-z0–9_]
  • \ W sobib kõigega, mis pole sulgudes

Mida see tähendab?

[^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 _

Kuid meie testjuhul on tõese tagastamiseks vaja palindroomi („ 0_0 (: / - \ :) 0–0 ”) , mis tähendab, et „ _ (: / - \ :) - ” tuleb sobitada.

Selle konkreetse testjuhtumi läbimiseks peame lisama " _ ".

We now have “\W_”

Samuti peame globaalse otsingu jaoks lisama lipu g .

We finally have “/[\W_]/g”
/ [\ W _] / g kasutati puhtalt demonstratiivsel eesmärgil, et näidata, kuidas RegExp töötab. / [^ A-Za-z0–9] / g on kõige lihtsam valida RegExp .

1. Kontrollige sisseehitatud funktsioonidega palindroome

Selle lahenduse jaoks kasutame mitut meetodit:

  • Meetod toLowerCase () tagastab väiketähtedeks teisendatud kutsungi väärtuse
  • Asendada () meetod tagastab uue stringi mõned või kõik kohtumised mustri asendada asendamine. Kasutame ühte äsja varem loodud RegExpi.
  • Split () meetodi lõheneb String objekt massiivi stringe eraldades string osadeks stringid.
  • Vastupidine () meetodi teistpidi massiivi asemel. Esimesest massiivi elemendist saab viimane ja viimasest esimene.
  • Liituda () meetod ühendab kõiki massiivi elemente string.
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");

Kommentaarideta:

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. Kontrollige FOR-silmusega Palindrome

Poolindeksimisel (len / 2) on eeliseid suurte stringide töötlemisel. Kontrollime igast osast otsa ja jagame FOR-aasa sees olevate iteratsioonide arvu kahega.

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");

Kommentaarideta:

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");

Loodetavasti leidsite sellest abi. See on osa minu artiklist "Kuidas lahendada FCC algoritme" Free Code Camp Algorithm Challenges, kus pakun välja mitu lahendust ja selgitan samm-sammult, mis kapoti all toimub.

Kaks võimalust Stringi lõppu kinnitada JavaScriptis

Selles artiklis selgitan, kuidas lahendada freeCodeCampi väljakutse “Kinnita lõppu”.

Kolm viisi stringide ümberpööramiseks JavaScriptis

See artikkel põhineb Free Code Campi algoritmi skriptimisel „Stringi ümberpööramine”

Kolm viisi, kuidas arv JavaScript JavaScriptis kindlaks teha

See artikkel põhineb Free Code Campi algoritmide skriptimisel “Arvu faktoreerimine”

Kolm viisi, kuidas leida JavaScripti stringi kõige pikem sõna

See artikkel põhineb Free Code Campi algoritmide skriptimisel „Leidke stringi pikim sõna”.

Kolm viisi, kuidas JavaScripti laused pealkirjastada

See artikkel põhineb Free Code Campi algoritmide skriptimisel "Pealkirja juhtum lause".

Kolmel viisil leiate massiivi suurima arvu JavaScripti abil

Selles artiklis selgitan, kuidas lahendada Free Code Campi väljakutse “Massiivide suurimate arvude tagastamine”. See ...

Kui teil on oma lahendus või ettepanekuid, jagage neid allpool kommentaarides.

Või saate jälgida mind Medium , Twitter, Github ja LinkedIn , kohe pärast klõpsate roheline süda allpool ;-)

# StayCurious, # KeepOnHacking & # MakeItHappen!

Ressursid

  • Regulaaravaldised - MDN
  • toLowerCase () meetod - MDN
  • asenda () - MDN
  • split () meetod - MDN
  • pöörd () meetod - MDN
  • liitu () meetod - MDN
  • String.length - MDN
  • poolt - MDN