Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tạo palindrome bằng tối đa một lần xóa trong JavaScript

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một chuỗi str làm đối số duy nhất. Hàm có thể xóa tối đa một ký tự từ chuỗi str và kiểm tra xem có thể biến nó thành palindrome không.

Ví dụ, nếu đầu vào là:

Đầu vào

const str = 'dr.awkward';

Đầu ra

const output = true;

Giải thích

Vì nếu xóa '.' khỏi chuỗi, chuỗi trở thành palindrome.

Ví dụ

Dưới đây là mã thực hiện:

const str = 'dr.awkward';
const validPalindrome = (str = '') => {
  const valid = (left, right) => {
    for (let i = left; i <= Math.floor((left + right) / 2); i++) {
      if (str[i] !== str[right - (i - left)]) {
        return false;
      }
    }
    return true;
  };
  for (let i = 0; i <= Math.floor(str.length / 2); i++) {
    const right = str.length - 1 - i;
    if (str[i] !== str[right]) {
      return valid(i, right - 1) || valid(i + 1, right);
    }
  }
  return true;
};
console.log(validPalindrome(str));

Kết quả

true