>웹 프론트엔드 >JS 튜토리얼 >자바스크립트에서 회문 문자열을 결정하는 방법(예제 분석)

자바스크립트에서 회문 문자열을 결정하는 방법(예제 분석)

不言
不言원래의
2018-09-01 12:00:082768검색

이 기사의 내용은 JavaScript에서 회문 문자열을 판단하는 방법(예제 분석)에 대한 것입니다. 필요한 친구가 참고할 수 있기를 바랍니다.

Paindromes(Paindromes)은 중국어로 거꾸로 읽어도 앞으로 읽어도 같다는 뜻이고, 영어로 "상하이 수돗물은 바다에서 나온다"처럼 대칭적으로 앞을 본다는 뜻이고, "madam"과 같이 모두 동일하며 회문이라고도 하는 숫자의 경우 "16461"과 같은 대칭 숫자, 즉 숫자를 역순으로 재배열하여 얻은 숫자를 나타냅니다.

문제 설명

주어진 문자열을 판단하고, 문자열이 회문이면 true,反之返回false를 반환합니다.

구현 방법

1.reverse()

function Palindromes(str) {
    let reg = /[\W_]/g; // \w 匹配所有字母和数字以及下划线; \W与之相反; [\W_] 表示匹配下划线或者所有非字母非数字中的任意一个;/g全局匹配
    let newStr = str.replace(reg, '').toLowerCase();
    let reverseStr = newStr.split('').reverse().join('')
    return reverseStr === newStr; // 与 newStr 对比
}

사실 여기서는 문자를 배열로 변환하고, 배열을 뒤집고, 문자열을 변환하는 등의 배열 연산 단계가 많아서 성능이 별로 좋지 않습니다. 배열을 변경하려면 새로운 힙 주소 공간을 열어야 하는 것으로 생각됩니다.

2. for loop

function Palindromes(str) {
    let reg = /[\W_]/g;
    let newStr = str.replace(reg, '').toLowerCase();
    for(let i = 0, len = Math.floor(newStr.length / 2); i < len; i++) {
        if(newStr[i] !== newStr[newStr.length - 1 - i]) return false;
    }
    return true;
}
  • 작성 방법 2

function Palindromes(str) {
    let reg = /[\W_]/g;
    let newStr = str.replace(reg, &#39;&#39;).toLowerCase();
    let len = newStr.length;
    for(let i = 0, j = len - 1; i < j; i++, j--) { // i < j
        console.log(&#39;---&#39;);
        if(newStr[i] !== newStr[j]) return false;
    }
    return true;
}

3. Recursion

function palin(str) {
    let reg = /[\W_]/g;
    let newStr = str.replace(reg, &#39;&#39;).toLowerCase();
    let len = newStr.length;
    while(len >= 1) {
        console.log('--')
        if(newStr[0] != newStr[len - 1]) {
            // len = 0; // 为了终止 while 循环 否则会陷入死循环
            return false;
        } else {
            return palin(newStr.slice(1, len - 1)); 
        // 截掉收尾字符 再次比较收尾字符是否相等 
        // 直到字符串剩下一个字符(奇数项)或者 0 个字符(偶数项)
        }
    }
    return true;
}

질문에 또 다른 요구사항 추가

주어진 문자열에 대해 최대 한 문자를 삭제하여 문자열이 맞는지 확인할 수 있습니다. 아직은 Palindrome이 아닙니다.

변수 플래그를 설정하세요. 처음으로 양쪽의 문자 쌍이 다른 것으로 확인되면 계속 비교할 수 있으며, 후속 비교에서 차이점이 발견되면 결과가 즉시 반환됩니다.

function palin(str) {
    let flag = false; // 第一次不同可允许
    let len = str.length;
    for(let [i, j] = [0, len - 1]; i < j; i++, j--) {
        if(str[i] !== str[j]) {
            if(flag) {
                return false;
            }
            // 第一次发现不同时,让右边-1 或左边+1判断相不相等 
            // 这时候若相等可继续 否则直接返回结果 false
            if(str[i++] == str[j]) {
                i++;
                flag = true;
            } else if (str[i] == str[j--]) {
                j--;
                flag = true;
            } else {
                return false;
            }
        }
    }
    return true;
}

palin('abaacaaa');
palin('aabsdjdbaa');
palin('ab')

관련 권장 사항:

PHP는 문자열이 회문 문자열인지 확인합니다

문자열을 검색하고 검색 결과를 string_javascript 기술로 반환하는 JavaScript 메서드

위 내용은 자바스크립트에서 회문 문자열을 결정하는 방법(예제 분석)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.