Mô tả vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào mảng chuỗi làm đối số duy nhất. Hàm trả về mảng các cặp chỉ số mà nối chuỗi tại các chỉ số đó tạo ra chuỗi palindrome mới.
Ví dụ, nếu đầu vào là:
const arr = ['tab', 'cat', 'bat'];
Thì đầu ra nên là:
const output = [[0, 2], [2, 0]];
Giải thích đầu ra
Vì cả 'battab' và 'tabbat' đều là palindrome.
Ví dụ minh họa
Mã thực hiện:
const arr = ['tab', 'cat', 'bat'];
const isPalindrome = (str = '') => {
let i = 0;
let j = str.length - 1;
while (i < j) {
if (str[i] != str[j]) return false;
i++;
j--;
};
return true;
};
const palindromePairs = (arr = []) => {
const res = [];
for (let i = 0; i < arr.length; i++) {
for (let j = i + 1; j < arr.length; j++) {
if (isPalindrome(arr[i] + arr[j])) {
res.push([i, j]);
}
if (isPalindrome(arr[j] + arr[i])) {
res.push([j, i]);
};
};
};
return res;
};
console.log(palindromePairs(arr));Giải thích mã
Sử dụng hàm phụ isPalindrome() kiểm tra palindrome. Hàm chính dùng tổ hợp tất cả cặp, những cặp thỏa mãn điều kiện sẽ đẩy chỉ số vào mảng kết quả.
Đầu ra
Kết quả trong console sẽ là:
[ [ 0, 2 ], [ 2, 0 ] ]