Home  >  Article  >  Web Front-end  >  How to determine palindrome string in javascript (example analysis)

How to determine palindrome string in javascript (example analysis)

不言
不言Original
2018-09-01 12:00:082744browse

The content of this article is about how JavaScript determines palindrome strings (example analysis). It has certain reference value. Friends in need can refer to it. I hope it will be helpful to you.

Paindromes(Paindromes), in Chinese, means that the backward and forward readings are the same, and symmetrical, such as "Shanghai tap water comes from the sea"; in English, It refers to words that are the same when viewed frontally and backwards, such as "madam"; and for numbers, also called palindromes, they refer to a symmetrical number like "16461", that is, the digits of this number are in reverse order. The number obtained after rearranging the order is the same as the original number.

Problem description

Judge the given string. If the string is a Palindromes, then return true, otherwise return false.

Implementation method

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 对比
}

Actually, many steps are done here to operate the array, converting characters to arrays, flipping arrays and then converting to strings, so here Performance isn't great either. It is thought that the array is a reference type. To change the array, a new heap address space needs to be opened.

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;
}
  • Writing method 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;
}

Give the question Add another requirement

For a given string, you can delete at most one character to determine whether it is still a palindrome.

Set a variable flag. When the pair of characters on both sides are found to be different for the first time, the comparison can be continued; if differences are found in subsequent comparisons, the result will be returned immediately.

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')

Related recommendations:

PHP determines whether a string is a palindrome string

JavaScript search String and return search results to a string method_javascript skills

The above is the detailed content of How to determine palindrome string in javascript (example analysis). For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn