>  기사  >  웹 프론트엔드  >  JavaScript의 문자열이 회문이 될 수 있는지 확인

JavaScript의 문자열이 회문이 될 수 있는지 확인

WBOY
WBOY앞으로
2023-09-03 20:49:021284검색

检查 JavaScript 中的字符串是否可以成为回文

JavaScript에서 문자열 조작의 세계를 탐색하면 주어진 문자열을 회문으로 변환할 수 있는지 여부를 결정하는 흥미로운 과제가 드러납니다. 동일한 단어나 문구를 앞뒤로 읽는 회문은 고유한 매력을 갖고 있으며 그 신비한 속성을 밝혀내려는 개발자의 호기심을 불러일으킵니다. 이 기사에서 우리는 JavaScript에 내재된 강력한 언어 기능과 알고리즘을 사용하여 문자열이 회문으로 바뀔 수 있는지 확인하는 복잡성을 밝혀내는 여정을 시작할 것입니다. 문자열 조작을 탐구하고 혁신적인 기술을 사용함으로써 문자열을 회문으로 변환하는 미스터리를 풀고 안목 있는 JavaScript 실무자로서의 기술을 향상시킵니다.

문제 설명

현재 과제는 문자 하나만 제거하여 주어진 문자열을 회문으로 변환할 수 있는지 여부를 효율적으로 결정할 수 있는 JavaScript 알고리즘을 개발하는 것입니다. 회문은 앞으로 읽을 때나 뒤로 읽을 때 변경되지 않습니다. 알고리즘에서는 회문을 생성해야 하는 경우 개별 문자를 제거하는 옵션을 고려하면서 입력 문자열을 철저히 분석하고 개별 문자를 검사해야 합니다. 출력은 문자열을 회문으로 변환할 수 있는지 여부를 나타내는 부울입니다. 더 나은 이해를 위해 다음 예를 고려해 보겠습니다.

입력 예

으아악

출력 예

으아악

는 최대 한 문자를 제거하여 문자열이 실제로 회문으로 변환될 수 있음을 나타냅니다.

방법

이 기사에서는 JavaScript에서 위의 문제를 해결하는 다양한 방법을 살펴보겠습니다. -

  • 두 손

  • 재귀

  • 동적 계획

방법 1: 두 개의 포인터

JavaScript에서 문자열이 회문이 될 수 있는지 확인하는 일반적인 문제는 두 포인터 방법을 사용하여 해결할 수 있습니다. 여기에는 두 개의 포인터(문자열의 시작 부분과 문자열 끝 부분에 하나씩)를 초기화하고 이러한 포인터의 문자를 비교한 후 중앙으로 이동하는 작업이 포함됩니다. 이를 달성하려면 문자열을 입력으로 사용하고 포인터를 초기화하고 변수를 수정하는 JavaScript 함수를 정의하십시오. 그런 다음 while 루프를 사용하여 문자를 비교하고 일치하지 않는 수정 사항을 추가하고 그에 따라 포인터를 이동합니다. 루프가 끝난 후 수정이 1보다 작거나 같은지 확인하여 회문이 형성될 수 있는지 확인합니다. 마지막으로 문자열에서 회문을 만들 수 있는지 여부를 나타내는 부울 값이 반환됩니다.

canBePalindrome 함수는 최대 한 문자를 제거하여 문자열을 회문으로 만들 수 있는지 여부를 확인합니다. 문자열을 반복하고 문자를 비교하기 위해 2포인터 접근 방식을 사용합니다. 문자가 동일하면 두 포인터가 모두 가운데를 향해 이동합니다. 그렇지 않은 경우 인접한 문자를 비교하여 문자를 제거할 수 있는지 확인합니다. 문자가 제거된 경우 false를 반환합니다. false를 반환하지 않고 루프가 완료되면 true를 반환하여 문자열이 회문이 될 수 있음을 나타냅니다. 하단의 사용 예에서는 이 기능을 보여줍니다.

으아악

출력

다음은 콘솔 출력입니다 -

으아악

방법 2: 재귀

JavaScript에서 재귀를 사용하여 문자열을 회문으로 만들 수 있는지 확인하려면 입력 문자열을 받아들이는 canBePalindrome()이라는 함수를 정의하세요. 기본 사례의 경우 문자열 길이가 1보다 작거나 같으면 true를 반환합니다. 그렇지 않으면 첫 번째 문자와 마지막 문자를 비교하고 canBePalindrome()을 업데이트된 문자열과 반복적으로 호출하여 동일하면 문자를 제거합니다. 이 과정은 기본 케이스에 도달할 때까지 반복됩니다. 첫 번째 문자와 마지막 문자가 같지 않으면 false를 반환합니다. 마지막으로 canBePalindrome()이 입력 문자열과 함께 호출되어 결과를 저장하고 추가 처리를 계속하거나 결과에 따라 적절한 메시지를 표시합니다.

이 코드에서 canFormPalindrome 함수는 문자열을 입력으로 받아들이고 문자열이 최대 한 문자를 제거하여 회문이 될 수 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다. isPalindrome 함수는 하위 문자열이 회문인지 여부를 확인하는 도우미 함수입니다.

으아악

출력

다음은 콘솔 출력입니다 -

으아악

방법 3: 동적 프로그래밍

JavaScript의 동적 프로그래밍을 사용하여 문자열을 회문으로 변환할 수 있는지 확인하려면 문자열을 입력으로 사용하는 canBePalindrome이라는 함수를 정의하세요. 하위 문제의 결과를 저장하는 동적 프로그래밍 테이블을 만듭니다. 두 개의 포인터를 사용하여 양쪽 끝에서 문자열을 반복하고 해당 위치의 문자를 비교합니다. 동일하다면 그에 따라 포인터를 이동하십시오. 다른 경우 포인터 사이의 하위 문자열이 테이블에서 처리되었는지 확인하십시오. 그렇지 않은 경우 canBePalindrome 함수는 하위 문자열에 대해 재귀적으로 호출되고 결과가 저장됩니다. 왼쪽 및 오른쪽 포인터에서 문자를 제외하고 두 경우 중 하나가 true를 반환하면 테이블을 업데이트하는 것을 고려하십시오. 테이블을 업데이트한 후 전체 문자열을 나타내는 항목에 저장된 값을 반환하여 회문으로 다시 정렬할 수 있는지 확인합니다. 이 접근 방식은 동적 프로그래밍을 활용하고 이를 하위 문제로 분해하여 문제를 효율적으로 해결합니다.

示例

在此代码中,canFormPalindrome 函数将字符串 str 作为输入,并返回一个布尔值,指示该字符串是否可以通过最多删除一个字符来使该字符串成为回文。该函数使用动态规划表dp来存储中间结果并检查str的所有可能的子串。最后,如果整个字符串可以成为回文,则返回 true,否则返回 false。

function canFormPalindrome(str) {
   const n = str.length;
 
   // Create a 2D dynamic programming table
   const dp = Array(n)
   .fill(false)
   .map(() => Array(n).fill(false));
 
   // Initialize the diagonal to true
   for (let i = 0; i < n; i++) {
      dp[i][i] = true;
   }
 
   // Fill the table diagonally
   for (let len = 2; len <= n; len++) {
      for (let i = 0; i < n - len + 1; i++) {
         const j = i + len - 1;
    
         if (str[i] === str[j]) {
         
            // Characters at the current indices are equal
            dp[i][j] = dp[i + 1][j - 1];
         } else {
         
            // Try removing either the character at index i or j
            dp[i][j] = dp[i + 1][j] || dp[i][j - 1];
         }
      }
   }
 
   // Return true if the whole string can be made a palindrome by removing at most one character
   return dp[0][n - 1];
}
 
// Example usage:
const str = "abca";
const canBePalindrome = canFormPalindrome(str);
console.log(canBePalindrome); 

输出

以下是控制台输出 -

true

结论

总之,确定字符串是否可以使用 JavaScript 转换为回文的过程是一个多方面的工作。通过利用各种字符串操作技术并采用系统方法,人们可以有效地确定实现回文对称的可行性。对字符频率的细致评估以及不常见字符串算法的利用可以带来令人着迷的见解和创造性的解决方案。从事这种智力追求使程序员能够深入研究语言操作的复杂性,从而对语言领域进行令人满意的探索。最终,识别字符串中回文潜力的能力证明了 JavaScript 作为编程语言的独创性和多功能性。

위 내용은 JavaScript의 문자열이 회문이 될 수 있는지 확인의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 tutorialspoint.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제