Palindrom adalah sebuah kata, frasa, angka maupun susunan lainnya yang dapat dibaca dengan sama baik dari depan maupun belakang (spasi antara huruf-huruf biasanya diperbolehkan). Kata "palindrom" berasal dari bahasa Yunani: palin (πάλιν; "lagi") and dromos (δρóμος; "arah")1.
Pada studi kasus palindrom yang ada di source code ini, ada 3 metode yang bisa digunakan untuk mengecek apakah kata atau kalimat yang diberikan merupakan palindrom atau tidak. Metode tersebut di antaranya adalah:
Metode reverse2
Di metode ini, kata yang diberikan akan dipecah per karakter lalu disusun ulang secara terbalik. Sehingga karakter paling awal akan berubah menjadi urutan terakhir dan begitu juga sebaliknya. Hasil dari susunan karakter baru tersebut lalu dicocokkan dengan kata aslinya. Apabila kedua kata tersebut bernilai sama, maka dapat dipastikan bahwa kata tersebut merupakan palindrom.
Contoh dari metode reverse dapat dilihat pada source code di bawah ini.
$value = 'katak';
$newValue = '';
for ($index = strlen($value) - 1; $index >= 0; $index--) {
$newValue .= $value[$index];
}
return $value === $newValue;Metode loop3
Berbeda dengan metode sebelumnya, pada metode loop kali ini akan dilakukan perulangan sejumlah karakter yang diberikan. Di setiap perulangan tersebut, karakter pada urutan tersebut akan dicocokkan dengan karakter dari urutan sebaliknya sebagaimana dapat dilihat pada tabel di bawah ini. Apabila dalam setiap perulangan kedua karakter dari masing-masing urutan tersebut cocok, maka dapat dipastikan bahwa kata tersebut merupakan palindrom.
| Karakter lama | Urutan lama | Urutan baru | Karater baru |
|---|---|---|---|
| k | 1 | 5 | k |
| a | 2 | 4 | a |
| t | 3 | 3 | t |
| a | 4 | 2 | a |
| k | 5 | 1 | k |
Contoh dari metode loop dapat dilihat pada source code di bawah ini.
$value = 'katak';
for ($index = 0; $index < floor(strlen($value) / 2); $index++) {
$lastCharacterIndex = strlen($value) - ($index + 1);
$firstCharacter = $value[$index];
$lastCharacter = $value[$lastCharacterIndex];
if ($firstCharacter !== $lastCharacter) {
return false;
}
}
return true;Ada optimasi yang dilakukan pada source code di atas, di mana batas perulangan strlen($value) dioptimasi menjadi floor(strlen($value) / 2) agar tidak terjadi pengecekan ganda pada saat proses perulangan berlangsung4.
Metode recursive5
Metode ini prinsipnya hampir sama dengan metode loop yang telah dijelaskan sebelumnya. Perbedaan dari metode recursive ini hanya terletak pada dihilangkannya perulangan for() dan pengecekan batas perulangan diganti menjadi if ($index < floor(strlen($value) / 2)) sehingga menghasilkan pemanggilan fungsi yang sama secara recursive sebagaimana dapat dilihat pada source code di bawah ini.
$this->value = 'katak';
public function checkUsingRecursive(int $index = 0): bool
{
$value = $this->value;
if ($index < floor(strlen($value) / 2)) {
$lastCharacterIndex = strlen($value) - ($index + 1);
$firstCharacter = $value[$index];
$lastCharacter = $value[$lastCharacterIndex];
if ($firstCharacter !== $lastCharacter) {
return false;
}
return $this->checkUsingRecursive($index + 1);
}
return true;
}1 Palindrom, Wikipedia bahasa Indonesia, ensiklopedia bebas. ↩
2 Programmer Zaman Now - Coding Interview Palindrome (Solusi Palindrome). ↩
3 Programmer Zaman Now - Coding Interview Palindrome (Solusi Tanpa Reverse String). ↩
4 Programmer Zaman Now - Coding Interview Palindrome (Optimasi Iterasi Palindrome). ↩
5 Programmer Zaman Now - Coding Interview Palindrome (Solusi Recursive). ↩