Du būdai patikrinti, ar „JavaScript“ nėra palindromų

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinių algoritmų scenarijų „Palindromų tikrinimas“.

Palindromas yra žodis, frazė, skaičius ar kita simbolių seka, skaitanti tą patį atgal arba į priekį. Žodį „palindromas“ XVII amžiuje pirmą kartą sugalvojo anglų dramaturgas Benas Jonsonas, kilęs iš graikų šaknų palin („vėl“) ir dromos („kelias, kryptis“). - src. Vikipedija

Šiame straipsnyje aš paaiškinsiu du metodus, pirmiausia naudodamasis įmontuotomis funkcijomis, o antrą - naudodamas „for loop“.

Algoritmo iššūkis

Grąžinkite „true“, jei nurodyta eilutė yra palindromas. Priešingu atveju grąžinkite klaidingą.

Palindromas yra žodis ar sakinys, rašomas vienodai tiek į priekį, tiek atgal, nepaisant skyrybos ženklų, didžiųjų raidžių ir tarpų.

Pastaba. Norėdami patikrinti palindromus, turėsite pašalinti visus raidinius ir skaitmeninius simbolius (skyrybos ženklus, tarpus ir simbolius) ir pasukti viską mažosiomis raidėmis.

Mes perduosime įvairaus formato stygas, tokias kaip „racecar“, „RaceCar“ ir „race racing“.

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

Pateikti bandymo atvejai

  • palindromas („lenktyninis automobilis“) turėtų grįžti teisingai
  • palindromas („ne palindromas“)turėtų grįžti klaidinga
  • palindromas („Žmogus, planas, kanalas. Panama“) turėtų grįžti tiesa
  • palindromas („niekada nelyginis ar lyginis“) turėtų būti tikras
  • palindromas („nope“) turėtų būti klaidingas
  • palindromas („szinteomla“) turėtų būti klaidingas
  • palindromas („Mano amžius 0, 0 si nei ym.“) turėtų grįžti į tikrovę
  • palindromas („1 akis už 1 akį“) turėtų būti klaidingas
  • palindromas („0_0 (: / - \ :) 0–0“) turėtų būti teisingas

Kurio reguliaraus posakio mums reikės norint išlaikyti paskutinį bandomąjį atvejį?

Reguliarūs posakiai yra modeliai, naudojami derinant simbolių derinius eilutėse.

Kai ieškant atitikties reikia daugiau nei tiesioginės atitikties, šablone yra specialių simbolių.

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

\ W pašalina visus raidinius ir skaitmeninius simbolius :

  • \ W atitinka bet kokį ne žodžio simbolį
  • \ W prilygsta [^ A-Za-z0–9_]
  • \ W sutampa su viskuo, kas nėra uždaryta skliausteliuose

Ką tai reiškia?

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

Tačiau bandomuoju atveju mums reikia palindromo („ 0_0 (: / - \ :) 0–0 “), kad grįžtume į tiesą , o tai reiškia, kad „ _ (: / - \ :) - “ turi būti suderinta.

Norint išlaikyti šį konkretų bandymo atvejį, reikės pridėti „ _ “.

We now have “\W_”

Taip pat turėsime pridėti g vėliavą visuotinei paieškai.

We finally have “/[\W_]/g”
/ [\ W _] / g buvo naudojamas tik demonstraciniam tikslui parodyti, kaip veikia „RegExp“. / [^ A-Za-z0–9] / g yra lengviausia pasirinkti „RegExp“ .

1. Patikrinkite, ar nėra palindromų su įmontuotomis funkcijomis

Šiam sprendimui naudosime kelis metodus:

  • ToLowerCase () metodas grąžina raginama string reikšmę konvertuoti į mažosiomis raidėmis.
  • Replace“ () metodas grąžina naują eilutę su kai kuriomis ar visomis modelio atitiktimis, pakeistomis pakeitimu. Mes naudosime vieną iš ką tik anksčiau sukurtų „RegExp“.
  • Suskaldyto () metodas skyla objekto String į stygų masyvo atskiriant eilutę į sub stygos.
  • Atvirkštinio () metodas apverčia žinutę vietoje masyvo. Pirmasis masyvo elementas tampa paskutiniu, o paskutinis - pirmuoju.
  • Join ()“ metodas sujungia visus masyvo elementus į eilutę.
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");

Be komentarų:

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. Patikrinkite, ar nėra palindromų su FOR kilpa

Pusinis indeksavimas (len / 2) turi pranašumų apdorojant dideles eilutes. Mes patikriname kiekvienos dalies galą ir padalijame kartojimų skaičių FOR kilpos viduje dviem.

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

Be komentarų:

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

Tikiuosi, kad jums tai buvo naudinga. Tai yra mano straipsnių apie „Kaip išspręsti FCC algoritmus“ tema „Laisvojo kodo stovyklos algoritmo iššūkiai“ dalis, kur aš siūlau keletą sprendimų ir žingsnis po žingsnio paaiškinu, kas vyksta po gaubtu.

Du būdai patvirtinti eilutės pabaigą „JavaScript“

Šiame straipsnyje paaiškinsiu, kaip išspręsti „freeCodeCamp“ iššūkį „Patvirtinti pabaigą“.

Trys būdai, kaip pakeisti eilutę „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Stygos pakeitimas“

Trys būdai, kaip apskaičiuoti skaičių „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Skaičiaus nustatymas“

Trys būdai, kaip rasti ilgiausią „JavaScript“ eilutės žodį

Šis straipsnis yra paremtas „Free Code Camp“ pagrindinių algoritmų scenarijais „Raskite ilgiausią eilutės žodį“.

Trys būdai, kaip įvesti sakinį „JavaScript“

Šis straipsnis yra pagrįstas „Free Code Camp“ pagrindinio algoritmo scenarijaus „Pavadinimo atvejis sakiniu“.

Trimis būdais galite rasti didžiausią masyvo skaičių naudodami „JavaScript“

Šiame straipsnyje aš paaiškinsiu, kaip išspręsti „Free Code Camp“ iššūkį „Grąžinti didžiausią skaičių masyvuose“. Tai ...

Jei turite savo sprendimą ar kokių nors pasiūlymų, pasidalykite jais toliau komentaruose.

Arba galite sekti mane „ Medium“ , „Twitter“, „Github“ ir „ LinkedIn“ , iškart po to, kai spustelėsite žalią širdį žemiau ;-)

# StayCurious, # KeepOnHacking ir # MakeItHappen!

Ištekliai

  • Reguliarūs posakiai - MDN
  • toLowerCase () metodas - MDN
  • pakeisti () - MDN
  • split () metodas - MDN
  • atvirkštinis () metodas - MDN
  • prisijungimo () metodas - MDN
  • Styginių ilgis - MDN
  • už - MDN