Stos ma wiele zastosowań, ale my nie przywykliśmy do myślenia „stosowego”. Trzeba to poprawić, robiąc jak najwięcej ćwiczeń. Zróbmy palindrom stosem.
Ok, to samo co możemy osiągnąć metodą dwóch wskaźników:
function palindromeStack(str){
str = str.replace(/\s/g, "").toLowerCase();
let stack = [];
for(const letter of str)
stack.push(letter);
for(const letter of str){
let lastOne = stack.pop();
if(letter !== lastOne)
return false;
}
return true;
}
Dla O(n) nie ma specjalnie znaczenia, czy pętla jest jedna czy dwie (nie mówimy o zagnieżdżeniu) czy nawet jest jedna pętla dwa wskaźniki. To jest koniec końców O(n) i tyle.
Natomiast sam algorytm działa tak:
- Wrzucamy litery od 1 do ostatniej na stos
- Stos ma tę cechę, że co wleci pierwsze zleci ostatnie i co wleci ostatnie zleci pierwsze
- Jeszcze raz przechodzimy po literach tym razem zrzucając ze stosu i porównujemy czy się zgadzają ze sobą
- Napis do małej i bez spacji bo to nie ma znaczenia w przypadku palindromów
Ok, tak wygląda użycie:
console.log(palindromeStack("Kajak"));
//true
console.log(palindromeStack("anna"));
//true
console.log(palindromeStack("Madam Im Adam"));
//true
console.log(palindromeStack("admin"));
//false
Warto się tutaj uczulić, że zawsze są edge cases. Na przykład możemy chcieć poza spacjami wywalić jeszcze znaki interpunkcyjne (apostrof, przecinek). Koniec końców jednak, algorytm znamy.