Ez a cikk a Free Code Camp Basic Algorithm Scripting „Palindromes ellenőrzése” alapján készült.
A palindrome olyan szó, kifejezés, szám vagy más karaktersorozat, amely ugyanazt a hátra vagy előre olvassa. A „palindrome” szót Ben Jonson angol dramaturg találta ki először a 17. században, a palin („újra”) és a dromos („út, irány”) görög gyökerekből . - src. Wikipédia
Ebben a cikkben két megközelítést fogok elmagyarázni, először beépített függvényekkel, másodszor pedig egy for ciklussal.
Algoritmus kihívás
Ha a megadott karakterlánc palindrom, akkor adja vissza az igaz értéket. Ellenkező esetben adjon vissza hamis értéket.A palindrome olyan szó vagy mondat, amelyet ugyanúgy írnak előre és hátra, figyelmen kívül hagyva az írásjeleket, a kis- és nagybetűket.
Jegyzet. A palindrómák ellenőrzéséhez el kell távolítania az összes nem alfanumerikus karaktert (írásjeleket, szóközöket és szimbólumokat), és mindent kisbetűvel kell fordítania.
Különböző formátumú húrokat adunk át, mint például a „racecar”, „RaceCar” és a „race CAR”.
function palindrome(str) { return true; } palindrome("eye");
Biztosított tesztesetek
- a palindromnak („versenyautó”) igaznak kell lennie
- palindrom („nem palindrom”)vissza kell adnia hamis
- palindromnak („Egy ember, egy terv, egy csatorna. Panama”) igaznak kellene visszatérnie
- a palindromnak („soha nem páros vagy páros”) igaznak kell lennie
- a palindromnak („nope”) hamis értéket kell adnia
- a palindromnak („szinteomla”) hamisnak kell lennie
- palindromnak („A korom 0, 0 si ega ym.”) igaznak kell lennie
- a palindromnak („1 szem az 1 szemre.”) hamis értéket kell adnia
- palindromnak („0_0 (: / - \ :) 0–0”) igaznak kell lennie
Melyik reguláris kifejezésre lesz szükségünk az utolsó teszteset átadásához?
A reguláris kifejezések olyan minták, amelyeket a karakterláncokban szereplő karakterkombinációk illesztésére használnak.
Ha az egyezés keresése mást igényel, mint közvetlen egyezés, a minta speciális karaktereket tartalmaz.
To pass the last test case, we can use two Regular Expressions: /[^A-Za-z0–9]/g or /[\W_]/g
\ W eltávolítja az összes nem alfanumerikus karaktert :
- \ W illeszkedik minden nem szó szerinti karakterhez
- \ W egyenértékű a következővel: [^ A-Za-z0–9_]
- \ W minden egyezik, ami nincs zárójelben
Az mit jelent?
[^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 _
Tesztes esetünkben azonban a palindromra („ 0_0 (: / - \ :) 0–0 ”) van szükség az igaz visszatéréshez , ami azt jelenti, hogy a „ _ (: / - \:) - ” kifejezésnek meg kell egyeznie.
A „ _ ” betűvel kell kiegészítenünk ezt a tesztesetet.
We now have “\W_”
A globális kereséshez hozzá kell adnunk a g jelzőt is.
We finally have “/[\W_]/g”
A / [\ W _] / g-
t tiszta demonstrációs céllal használtuk a RegExp működésének bemutatására. / [^ A-Za-z0–9] / g a legkönnyebben választható RegExp .
1. Ellenőrizze a beépített funkciókkal rendelkező palindromokat
Ehhez a megoldáshoz több módszert fogunk használni:
- A toLowerCase () metódus a kisbetűvé konvertált hívó karakterlánc értékének visszaadására.
- A helyettesítés () metódus egy új karakterlánc visszaküldéséhez egy vagy több minta egyezésével, helyettesítéssel. Az imént létrehozott RegExp egyikét fogjuk használni.
- A split () metódus a String objektumot stringek tömbjévé osztja fel, a sztringet részláncokra bontva.
- A fordított () módszer megfordítja a tömböt a helyén. Az első tömbelem lesz az utolsó, az utolsó pedig az első.
- A join () metódus egy tömb összes elemét egy karaktersorozatba kapcsolja .
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");
Hozzászólások nélkül:
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. Ellenőrizze a Palindromokat egy FOR hurokkal
A félindexelésnek (len / 2) előnyei vannak a nagy karakterláncok feldolgozásakor. Minden részből ellenőrizzük a végét, és elosztjuk a FOR ciklus belsejében lévő ismétlések számát kettővel.
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");
Hozzászólások nélkül:
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");
Remélem, hasznosnak találta ezt. Ez része a Free Code Camp Algorithm Challenges című „Hogyan lehet megoldani az FCC algoritmusokat” című cikksorozatomnak, ahol számos megoldást javaslok, és lépésről lépésre elmagyarázom, mi történik a motorháztető alatt.
Kétféle módon erősítheti meg a String végét a JavaScript-ben
Ebben a cikkben elmagyarázom, hogyan lehet megoldani a freeCodeCamp „Vége megerősítése” kihívását.
Három módszer a karakterlánc megfordítására a JavaScript-ben
Ez a cikk a Free Code Camp algoritmus-szkriptjein alapul, „Fordítsa meg a karakterláncot”
Három módszer a szám ténylegesítésére a JavaScript-ben
Ez a cikk a Free Code Camp algoritmus-szkriptjein alapszik: „Számok ténylegesítése”
Három módszer a leghosszabb szó megkeresésére egy stringben a JavaScript-ben
Ez a cikk a Free Code Camp algoritmus-szkriptjein alapul: „Keresse meg a leghosszabb szót egy karakterláncban”.
Három módszer a mondat elnevezésére a JavaScript-ben
This article is based on Free Code Camp Basic Algorithm Scripting “Title Case a Sentence”.
Three ways you can find the largest number in an array using JavaScript
In this article, I’m going to explain how to solve Free Code Camp’s “Return Largest Numbers in Arrays” challenge. This…
If you have your own solution or any suggestions, share them below in the comments.
Or you can follow me on Medium, Twitter, Github and LinkedIn, right after you click the green heart below ;-)
#StayCurious, #KeepOnHacking & #MakeItHappen!
Resources
- Regular Expressions — MDN
- toLowerCase() method — MDN
- replace() — MDN
- split() method — MDN
- reverse() method — MDN
- join() method — MDN
- String.length — MDN
- for — MDN