如何在JavaScript中编写回文

时间:2014-03-01 07:28:36

标签: javascript palindrome

我想知道如何在javascript中编写回文,我输入不同的单词和程序显示单词是否是回文。例如,单词中午是回文,而坏则不是。

提前谢谢。

52 个答案:

答案 0 :(得分:43)

function palindrome(str) {

    var len = str.length;
    var mid = Math.floor(len/2);

    for ( var i = 0; i < mid; i++ ) {
        if (str[i] !== str[len - 1 - i]) {
            return false;
        }
    }

    return true;
}
如果指定的字是回文,

palindrome会返回,基于boolean值(true / false)

<强>更新

由于效果的原因,我在这个问题上打开了赏金,我做了研究,结果如下:

如果我们处理大量数据,例如

var abc = "asdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfdasdhfkahkjdfhkaksjdfhaksdfjhakjddfhkjahksdhfaiuyqewiuryiquweyriyqiuweyriuqiuweryiquweyriuqyweirukajsdhfkahdfjkhakjsdhfkahksdhfakhdjkfqwiueryqiueyriuasdkfjhakjhdfkjashfkajhsdfkjahsdkalsdjflkasjdfljqoiweurasldjflasfd";

for ( var i = 0; i < 10; i++ ) {
    abc += abc;  // making string even more larger
}

function reverse(s) { // using this method for second half of string to be embedded
    return s.split("").reverse().join("");
}

abc += reverse(abc); // adding second half string to make string true palindrome

在此示例中,回文为真,只需注意

发布回文函数给出时间从180到210毫秒(在当前示例中),并在下面发布函数 使用string == string.split('').reverse().join('')方法可以得到980到1010毫秒。

  

机器详细信息:

     

系统: Ubuntu 13.10   操作系统类型: 32位    RAM: 2 Gb    CPU: 3.4 Ghz * 2   浏览器: Firefox 27.0.1

答案 1 :(得分:13)

试试这个:

var isPalindrome = function (string) {
    if (string == string.split('').reverse().join('')) {
        alert(string + ' is palindrome.');
    }
    else {
        alert(string + ' is not palindrome.');
    }
}

document.getElementById('form_id').onsubmit = function() {
   isPalindrome(document.getElementById('your_input').value);
}

所以这个脚本会警告结果,是不是回文。您需要更改带有输入ID的your_id和带有您的表单ID的form_id才能使其正常工作。

Demo!

答案 2 :(得分:9)

使用类似的东西

function isPalindrome(s) {
    return s == s.split("").reverse().join("") ? true : false;
}

alert(isPalindrome("noon"));

或者上面的代码可以优化为[右折叠评论后更新]

function isPalindrome(s) {
    return s == s.split("").reverse().join("");
}

alert(isPalindrome("malayalam")); 
alert(isPalindrome("english")); 

答案 3 :(得分:6)

看看这个:

function isPalindrome(word){
    if(word==null || word.length==0){
        // up to you if you want true or false here, don't comment saying you 
        // would put true, I put this check here because of 
        // the following i < Math.ceil(word.length/2) && i< word.length
        return false;
    }
    var lastIndex=Math.ceil(word.length/2);
    for (var i = 0; i < lastIndex  && i< word.length; i++) {
        if (word[i] != word[word.length-1-i]) {
            return false;
        }
     }
     return true;
} 

编辑:现在执行了一半的比较操作,因为我只迭代最多半个字来将它与单词的最后部分进行比较。更快的大数据!!!

由于字符串是char数组,因此无需使用charAt函数!!!

参考:http://wiki.answers.com/Q/Javascript_code_for_palindrome

答案 4 :(得分:6)

更快的方式:

- 计算循环的一半。

- 存储变量中单词的长度,而不是每次计算。

编辑: 将字长/ 2存储在临时变量中,以便不按(mvw)所指示的每次循环计算。

function isPalindrome(word){
   var i,wLength = word.length-1,wLengthToCompare = wLength/2;

   for (i = 0; i <= wLengthToCompare ; i++) {
     if (word.charAt(i) != word.charAt(wLength-i)) {
        return false;
     }
   }
   return true;
} 

答案 5 :(得分:4)

让我们从回文的递归定义开始:

  1. 空字符串&#39;&#39;是一个回文
  2. 由字符c组成的字符串,因此&#39; c&#39;,是一个回文
  3. 如果字符串s是回文,那么字符串&#39; c&#39; + s +&#39; c&#39;某些人物c是回文
  4. 此定义可直接编码为JavaScript:

    function isPalindrome(s) {
      var len = s.length;
      // definition clauses 1. and 2.
      if (len < 2) {
        return true;
      }
      // note: len >= 2
      // definition clause 3.
      if (s[0] != s[len - 1]) {
        return false;
      }
      // note: string is of form s = 'a' + t + 'a'
      // note: s.length >= 2 implies t.length >= 0
      var t = s.substr(1, len - 2);
      return isPalindrome(t);
    }
    

    以下是MongoDB的 mongo JavaScript shell的一些额外测试代码,在带有调试器的Web浏览器中将 print()替换为 console.log ()

    function test(s) {
      print('isPalindrome(' + s + '): ' + isPalindrome(s));
    }
    
    test('');
    test('a');
    test('ab');
    test('aa');
    test('aab');
    test('aba');
    test('aaa');
    test('abaa');
    test('neilarmstronggnortsmralien');
    test('neilarmstrongxgnortsmralien');
    test('neilarmstrongxsortsmralien');
    

    我得到了这个输出:

    $ mongo palindrome.js
    MongoDB shell version: 2.4.8
    connecting to: test
    isPalindrome(): true
    isPalindrome(a): true
    isPalindrome(ab): false
    isPalindrome(aa): true
    isPalindrome(aab): false
    isPalindrome(aba): true
    isPalindrome(aaa): true
    isPalindrome(abaa): false
    isPalindrome(neilarmstronggnortsmralien): true
    isPalindrome(neilarmstrongxgnortsmralien): true
    isPalindrome(neilarmstrongxsortsmralien): false
    

    迭代解决方案是:

    function isPalindrome(s) {
      var len = s.length;
      if (len < 2) {
        return true;
      }
      var i = 0;
      var j = len - 1;
      while (i < j) {
        if (s[i] != s[j]) {
          return false;
        }
        i += 1;
        j -= 1;
      }
      return true;
    }
    

答案 6 :(得分:3)

捅了一下。但是,有点难以衡量表现。

function palin(word) {
    var i = 0,
        len = word.length - 1,
        max = word.length / 2 | 0;

    while (i < max) {
        if (word.charCodeAt(i) !== word.charCodeAt(len - i)) {
            return false;
        }
        i += 1;
    }
    return true;
}

我的想法是使用charCodeAt()代替charAt(),希望分配Number代替String会有更好的性能,因为String是可变长度,分配可能更复杂。此外,只需迭代一半(as noted by sai),因为这就是所需要的。此外,如果长度为奇数(例如:'aba'),则中间字符始终正常。

答案 7 :(得分:2)

尝试

isPalindrome = (string) => {
    if (string === string.split('').reverse().join('')) {
        console.log('is palindrome');
    }
    else {
        console.log('is not palindrome');
    }
}

isPalindrome(string)

答案 8 :(得分:2)

String.prototype.isPalindrome = function isPalindrome() {

    const cleanString = this.toLowerCase().replace(/\s+/g, '');
    const cleanStringRevers = cleanString.split("").reverse().join("");

    return cleanString === cleanStringRevers;
}

let nonPalindrome = 'not a palindrome';
let palindrome = 'sugus';

console.log(nonPalindrome.isPalindrome())

console.log(palindrome.isPalindrome())

答案 9 :(得分:2)

解决技术测试时最重要的事情是不要使用快捷方式 - 他们希望通过算法来了解您的想法!不是你使用的方法。

这是我提出的一个(我吹了测试后45分钟)。尽管如此,还是有一些优化。在编写任何算法时,最好假定false并在其看起来为true时更改逻辑。

<强> isPalindrome()

基本上,要使其以 O(N)(线性)复杂度运行,您需要有2个迭代器,其向量指向彼此。意思是,一个从开始处开始的迭代器和一个从结尾开始的迭代器,每个都向内移动。你可以让迭代器遍历整个数组,并在它们在中间相遇时使用条件break / return,但它可以节省一些工作只给每个迭代器一个半长默认情况下。

for循环似乎强制使用更多检查,因此我使用while循环 - 我不太习惯。

以下是代码:

/**
 * TODO: If func counts out, let it return 0
 *  * Assume !isPalindrome (invert logic)
 */
function isPalindrome(S){
    var s = S
      , len = s.length
      , mid = len/2;
      , i = 0, j = len-1;

    while(i<mid){
        var l = s.charAt(i);
        while(j>=mid){
            var r = s.charAt(j);
            if(l === r){
                console.log('@while *', i, l, '...', j, r);
                --j;
                break;
            }
            console.log('@while !', i, l, '...', j, r);
            return 0;
        }
        ++i;
    }
    return 1;
}

var nooe = solution('neveroddoreven');  // even char length
var kayak = solution('kayak');  // odd char length
var kayaks = solution('kayaks');

console.log('@isPalindrome', nooe, kayak, kayaks);

请注意,如果循环计数,则返回true。应该反转所有逻辑,以便默认返回false。我也使用了一种捷径方法String.prototype.charAt(n),但我觉得这很好,因为每种语言本身都支持这种方法。

答案 10 :(得分:2)

检查字符串的最佳方法是使用更多标准(例如案例和特殊字符)的回文...

function checkPalindrom(str) {
    var str = str.replace(/[^a-zA-Z0-9]+/gi, '').toLowerCase();
    return str == str.split('').reverse().join('');
}

您可以使用以下单词和字符串对其进行测试,并为您提供更具体的结果 bob 文件,请注意,我不同意。快速永远不会阻止肥胖。我吃鳕鱼

对于字符串,它会忽略特殊字符并将字符串转换为小写。

答案 11 :(得分:1)

这里是一个不使用String.reverse的单行,

const isPal = str => Array
  .apply(null, new Array(strLen = str.length))
  .reduce((acc, s, i) => acc + str[strLen - (i + 1)], '') === str;

答案 12 :(得分:1)

I think following function with time complexity of o(log n) will be better.

    function palindrom(s){
    s = s.toString();
    var f = true; l = s.length/2, len = s.length -1;
    for(var i=0; i < l; i++){
            if(s[i] != s[len - i]){
                    f = false; 
                    break;
            }
    }
    return f;

    }

console.log(palindrom(12321));

答案 13 :(得分:1)

str1是原始字符串,其中包含已删除的非字母数字字符和空格,str2是原始字符串已反转。

function palindrome(str) {

  var str1 = str.toLowerCase().replace(/\s/g, '').replace(
    /[^a-zA-Z 0-9]/gi, "");

  var str2 = str.toLowerCase().replace(/\s/g, '').replace(
    /[^a-zA-Z 0-9]/gi, "").split("").reverse().join("");


  if (str1 === str2) {
    return true;
  }
  return false;
}

palindrome("almostomla");

答案 14 :(得分:1)

第一位,我通过转换小写并去除空格来验证此单词,然后与参数单词中的反向单词进行比较。

function isPalindrome(input) {
    const toValid = input.trim("").toLowerCase();
    const reverseWord = toValid.split("").reverse().join("");
    return reverseWord == input.toLowerCase().trim() ? true : false;
}
isPalindrome("    madam ");
//true

答案 15 :(得分:1)

此功能将删除所有非字母数字字符(标点符号,空格和符号),并将所有小写字母翻转以检查回文。

function palindrome(str){

    var re = /[^A-Za-z0-9]/g;
    str = str.toLowerCase().replace(re, '');
    return str == str.split('').reverse().join('') ? true : false;

}

答案 16 :(得分:1)

快25倍+递归+非分支+简洁

function isPalindrome(s,i) {
 return (i=i||0)<0||i>=s.length>>1||s[i]==s[s.length-1-i]&&isPalindrome(s,++i);
}

See my complete explanation here.

答案 17 :(得分:1)

这个怎么样?

function pall (word) {

    var lowerCWord = word.toLowerCase();
    var rev = lowerCWord.split('').reverse().join('');

    return rev.startsWith(lowerCWord);
    }

pall('Madam');

答案 18 :(得分:1)

function palindrome(str) {
    var lenMinusOne = str.length - 1;
    var halfLen = Math.floor(str.length / 2);

    for (var i = 0; i < halfLen; ++i) {
        if (str[i] != str[lenMinusOne - i]) {
            return false;
        }
    }
    return true;
}

针对半字符串解析和常量值变量进行了优化。

答案 19 :(得分:1)

    function palindrome(str) {
        var re = /[^A-Za-z0-9]/g;
        str = str.toLowerCase().replace(re, '');
        var len = str.length;
        for (var i = 0; i < len/2; i++) {
            if (str[i] !== str[len - 1 - i]) {
                return false;
            }
        }
        return true;
    }

答案 20 :(得分:0)

function isPalindrome(word) {
    let strLen = word.length;
    word = word.toLocaleLowerCase();

    if (strLen === 0 || strLen === 1) {
        return true;
    }

    if (word[0] === word[strLen - 1])  {
        return isPalindrome(word.slice(1, strLen - 1) );
    }  

    return false;
}

答案 21 :(得分:0)

    function reversName(name){
            return name
                  .split('')
                  .reverse()
                  .join('') === name ;
    };
    console.log(reversName('suus'));
    console.log(reversName('suusss'));

答案 22 :(得分:0)

/ *以下功能完成以下任务。

 1. Fetch all the substrings of a given string. 
 2. Find which of the substrings are palindromes.
 3. Find the longest palindrome.
 4. Find if the longest palindrome is a lucky palindrome.

  */

function SubstringMnipulations(S) {
    let Str = S.toString(); 
    let AllSubStrs = splitSubstrings(Str);
    let Pelindromes = arePelindrome(AllSubStrs);
    let LongestPelindrome = getLongestString(Pelindromes);
    let isPrimeVar = isPrime(LongestPelindrome);
    return {
      "possibleSubstrings": AllSubStrs,
      "pelindromes": Pelindromes,
      "longestPelindrome": LongestPelindrome,
      "isLuckyPelindrome": isPrimeVar
    };
  }

function splitSubstrings(Str) {
  let StrLength = Str.length;
  let maxIndex = StrLength;
  let AllSubStrs = [];
  for(var index = 0; index < maxIndex; index++ ) {
    for(var innerIndex = 1; innerIndex <= maxIndex-index; innerIndex++) {
      AllSubStrs.push(Str.substring(index, (index+innerIndex)));
    }
  }
  return AllSubStrs;
}

function arePelindrome(StrArr) {
  let pelindrome = [];
  for(i=0; i<StrArr.length;i++) {
    if(isPelindrome(StrArr[i])) {
      if(StrArr[i].length>1) {
        pelindrome.push(StrArr[i]);
      }
    }
  }

  return pelindrome;
}

function isPelindrome(Str) {
  let strLen = Str.length;
  let firstHalfIndex = 0;
  if(strLen==1) {
    return true;
  }

  let firstHalf = "";
  let secondHalf = "";

  if(strLen>1 && strLen%2==0) {
    firstHalfIndex = strLen/2;
    firstHalf = Str.substring(0, firstHalfIndex);
    secondHalf = Str.substring((firstHalfIndex), strLen);
  } else {
    firstHalfIndex = (strLen-1)/2;
    firstHalf = Str.substring(0, firstHalfIndex);
    secondHalf = Str.substring((1+firstHalfIndex), strLen);
  }

  secondHalf = reverseString(secondHalf);
  return firstHalf === secondHalf;
}

function reverseString(Str) {
  return Str.split("").reverse().join("");
}

function getLongestString(Str) {
  let lengthCount = [];
  for(i=0; i<Str.length;i++) {
    lengthCount.push(Str[i].length);
  }

  return Str[lengthCount.indexOf(Math.max(...lengthCount))];
}

function isPrime(Str) {
  let input = Str.length;
  let prime = true;
    for (let i = 2; i <= Math.sqrt(input); i++) {
        if (input % i == 0) {
            prime = false;
            break;
        }
    }
    return prime && (input > 1);
}

答案 23 :(得分:0)

function palindrome(str) {
    var re = /[\W_]/g; // or var re = /[^A-Za-z0-9]/g;
    var lowRegStr = str.toLowerCase().replace(re, '');
    var reverseStr = lowRegStr.split('').reverse().join(''); 
    return reverseStr === lowRegStr; 
}
palindrome("Eye Eye");

答案 24 :(得分:0)

我使用的是:-

function isPalindrome(arg){
    for(let i=0;i<arg.length;i++){
        if(arg[i]!==arg[(arg.length-1)-i]) 
          return false;
    return true;
}}

答案 25 :(得分:0)

这是一个1行程序,用于检查您的字符串是否是回文:-

((s) => `Is ${s} a palindrome ? \n Answer is :- ${s.split('').reverse().join('') == s}`)('bob')

只需修改此IIFE的最后一个参数即可检查不同的输入。这也许是最好的解决方案。

答案 26 :(得分:0)

function isPalindrome(str) {
  var isPalindrome = true;

  if(str.length === 2){
    return isPalindrome;
  }
  for(let i = 0, d = str.length - 1; i<(d-i); i++ )
  {
    if(str[i] !== str[d - i] ){
      return !isPalindrome
    }
  }
   return isPalindrome
  }

答案 27 :(得分:0)

这是使用ES6功能检查弦回文的最佳且强大的解决方案。

const str="madam"
var result=[...str].reduceRight((c,v)=>((c+v)))==str?"Palindrome":"Not Palindrome";
console.log(result);

答案 28 :(得分:0)

使用Array.prototype.every()的替代解决方案

x

答案 29 :(得分:0)

@OnClick(R.id.btnLocaleEng)
public void onLocaleChangedEng(){
    Locale english = new Locale("en", "US");
    Resources resources = getLocalizedResources(context, english);
    title.setText(resources.getString(R.string.title));
    ...
}

@OnClick(R.id.btnLocaleFi)
public void onLocaleChangedFi(){
    Locale english = new Locale("fi", "FI");
    Resources resources = getLocalizedResources(context, english);
    title.setText(resources.getString(R.string.title));
    ...
}

@NonNull
public Resources getLocalizedResources(Context context, Locale desiredLocale) {
    Configuration conf = context.getResources().getConfiguration();
    conf = new Configuration(conf);
    conf.setLocale(desiredLocale);
    Context localizedContext = context.createConfigurationContext(conf);
    return localizedContext.getResources();
}

答案 30 :(得分:0)

这个答案很容易阅读,我试着用评论来解释。查看下面的代码,了解如何在 JavaScript 中编写回文。 步骤 1:使用 replace() 从参数字符串 'str' 中删除所有非字母数字字符(标点、空格和符号),然后使用 toLowerCase() 将其转换为小写。 第 2 步:现在使字符串反转。首先使用 split() 将字符串拆分为数组,然后使用 reverse() 反转数组,然后通过使用 join() 连接数组元素来制作字符串。 第 3 步:使用 charAt(0) 查找 nonAlphaNumeric 字符串的第一个字符。 步骤 4:使用 charAt(nonAlphaNumeric string 的长度 - 1) 找到 nonAlphaNumeric 字符串的最后一个字符。 第 5 步:使用 If 条件来判断 nonAlphaNumeric 字符串和反向字符串是否相同。 第 6 步:使用另一个 If 条件将 nonAlphaNumeric 字符串的第一个字符与 nonAlphaNumeric 字符串的最后一个字符相同。

function palindrome(str) {
  var nonAlphaNumericStr = str.replace(/[^0-9A-Za-z]/g, "").toLowerCase(); // output - e1y1e
 
  var reverseStr = nonAlphaNumericStr.split("").reverse().join(""); // output - e1y1e
  
  var firstChar = nonAlphaNumericStr.charAt(0); // output - e
  
  var lastChar = nonAlphaNumericStr.charAt(nonAlphaNumericStr.length - 1); // output - e
  
  if(nonAlphaNumericStr === reverseStr) {
    
    if(firstChar === lastChar) {
      return `String is Palindrome`; 
    }
  }
  return `String is not Palindrome`; 
}
console.log(palindrome("_eye"));

答案 31 :(得分:0)

您可以尝试以n/2复杂度尝试以下代码

   palindrom(word)
   {
        let len = word.length

        let limit = len % 2 ? (len - 1)/2 : (len/2)

        for(let i=0; i < limit; i++)
        {
            if(word[i] != word[len-i-1])
            {
                alert('non a palindrom')
                return
            }
        }

        alert('palindrom')
        return;
   }

调用函数

palindrom('abba')

答案 32 :(得分:0)

(function (strOne,strTwo) {
    var a = strOne.toLowerCase().split("").sort().join("")=== 
            strTwo.toLowerCase().split("").sort().join("");

    console.log(a ? ("pallindrome"): ("not a pallindrome"));

})("mommosm","mommom");

答案 33 :(得分:0)

为避免特殊字符出错,请使用以下功能

function palindrome(str){
  var removeChar = str.replace(/[^A-Z0-9]/ig, "").toLowerCase();
  var checkPalindrome = removeChar.split('').reverse().join('');
  if(removeChar === checkPalindrome){
     return true;
  }else{
    return false;
  }
}

答案 34 :(得分:0)

注意:这是区分大小写的

function palindrome(word)
{
    for(var i=0;i<word.length/2;i++)
        if(word.charAt(i)!=word.charAt(word.length-(i+1)))
            return word+" is Not a Palindrome";
    return word+" is Palindrome";
}

这是小提琴:http://jsfiddle.net/eJx4v/

答案 35 :(得分:0)

我不确定这个JSPerf如何检查代码性能。我只是试图扭转字符串&amp;检查值。请评论一下Pros&amp;这种方法的缺点。

function palindrome(str) {
    var re = str.split(''),
        reArr = re.slice(0).reverse();

    for (a = 0; a < re.length; a++) {
        if (re[a] == reArr[a]) {
            return false;
        } else {
            return true;
        }
    }
}

<强> JS Perf test

答案 36 :(得分:0)

function palindrome(str){
    for (var i = 0; i <= str.length; i++){ 
        if  (str[i] !== str[str.length - 1 - i]) {
            return "The string is not a palindrome";
        }
    }
return "The string IS a palindrome"
}

palindrome("abcdcba"); //"The string IS a palindrome"
palindrome("abcdcb"); //"The string is not a palindrome";

如果你在if语句之前使用console.log这一行:console.log(str[i] + " and " + str[str.length - 1 - i]),你会看到(str[str.length - 1 - i])是什么。我认为这是最令人困惑的部分,但是当你在控制台上查看它时,你会很容易理解它。

答案 37 :(得分:0)

这是另一种方法:

function isPalin(str) {
  str = str.replace(/\W/g,'').toLowerCase();
  return(str==str.split('').reverse().join(''));
}

答案 38 :(得分:0)

下面的代码告诉我们如何从textBox中获取一个字符串并告诉你它是否是一个回文并不是&amp;在另一个文本框中显示您的答案    

<html>
<head>
<meta charset="UTF-8"/>
<link rel="stylesheet" href=""/>

</head>  
<body>   
<h1>1234</h1>
<div id="demo">Example</div>
<a  accessKey="x" href="http://www.google.com" id="com" >GooGle</a>
<h1 id="tar">"This is a Example Text..."</h1>
Number1 : <input type="text" name="txtname" id="numb"/>
Number2 : <input type="text" name="txtname2" id="numb2"/>
Number2 : <input type="text" name="txtname3" id="numb3" />
<button type="submit"  id="sum" onclick="myfun()" >count</button>
<button type="button"  id="so2" onclick="div()" >counnt</button><br/><br/>
<ol>
<li>water</li>
<li>Mazaa</li>
</ol><br/><br/>
<button onclick="myfun()">TryMe</button>
    <script>
    function myfun(){
    var pass = document.getElementById("numb").value;
    var rev = pass.split("").reverse().join("");
    var text = document.getElementById("numb3");
    text.value = rev;
    if(pass === rev){
    alert(pass + " is a Palindrome");
    }else{
    alert(pass + " is Not a Palindrome")
    }
    }
    </script>
</body>  
</html>  

答案 39 :(得分:0)

function palindrome(str) {    
    var testString = str.toLowerCase();


    var expression = /[a-z0-9\^s]/gi;
    if (testString.match(expression).reverse().join("") == testString.match(expression).join("")) {
        return true;
    } else {
        return false;
    }
}

答案 40 :(得分:0)

您也可以这样做:

function isPalindrome(str) {
var newStr = '';

for(var i = str.length - 1; i >=0; i--) {
    newStr += str[i];
}

if(newStr == str) {
    return true;
    return newStr;
} else {
    return false;
    return newStr;
}
}

答案 41 :(得分:0)

ES6的做法。请注意,我利用数组方法reduceRight来反转字符串(如果将字符串作为上下文,则可以对字符串使用数组方法,因为低级别 - 字符串是字符数组)。不,它不像其他解决方案那样高效,但没有看到任何使用es6或更高阶函数的答案,所以我想把它扔出去。

ok

答案 42 :(得分:0)

function Palindrome(str) {
  let forwardStr = str.toLowerCase().replace(/[\W_]/g, '');
  let reversedStr = forwardStr.split('').reverse().join();

  return forwardStr === reversedStr;
}
console.log(Palindrome('madam'));

答案 43 :(得分:0)

代码简洁快速且易于理解。

TL; DR

说明:

此处isPalindrome函数接受str参数,该参数为typeof string。

  1. 如果str param的长度小于或等于1,则只返回“false”。
  2. 如果上述情况为false,则继续执行第二个if语句,并检查字符串0位置的字符是否与最后一个字符相同。它在两者之间进行了不平等测试。

    str.charAt(0)  // gives us the value of character in string at position 0
    str.slice(-1)  // gives us the value of last character in the string.
    
  3. 如果不等式结果为真,那么它继续前进并返回false。

    1. 如果前一个语句的结果为false,则它会一遍又一遍地递归调用isPalindrome(str)函数,直到最终结果为止。
    2. 	function isPalindrome(str){
      	
      	if (str.length <= 1) return true;
      	if (str.charAt(0) != str.slice(-1)) return false;
      	return isPalindrome(str.substring(1,str.length-1));
      	};
      
      
      document.getElementById('submit').addEventListener('click',function(){
      	var str = prompt('whats the string?');
      	alert(isPalindrome(str))
      });
      
      document.getElementById('ispdrm').onsubmit = function(){alert(isPalindrome(document.getElementById('inputTxt').value));
      }
      <!DOCTYPE html>
      <html>
      <body>
      <form id='ispdrm'><input type="text" id="inputTxt"></form>
      
      <button id="submit">Click me</button>
      </body>
      </html>

答案 44 :(得分:0)

这将测试字符串的每一端都在外面,一旦检测到缺乏对称性就返回false。对于具有奇数字母的单词,不会测试中心字母。

function isPalindrome(word){
    var head = 0;
    var tail = word.length - 1;

    while (head < tail) {
        if (word.charAt(head) !== word.charAt(tail)){
            return false
        } else {
            head ++;
            tail --;
        }
    };
    return true;
};

答案 45 :(得分:0)

function palindrome(s) {
  var re = /[\W_]/g;
  var lowRegStr = s.toLowerCase().replace(re, '');
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  return reverseStr === lowRegStr;
}

答案 46 :(得分:0)

为了获得更好的性能,您也可以使用此

        DateTime myDate = DateTime.Parse("2017-03-01");
        var RoundList = (from t1 in entities.RPlays.AsNoTracking()
                         where t1.Start == myDate && t1.VId == 32
                         select new
                         {
                             TimePlayed = t1.TimePlayed,
                             MatchPlayed = t1.MatchPlayed 
                         });

答案 47 :(得分:0)

一个简单的一行代码,用于检查字符串是否为回文:

function palindrome (str) {

  return str === str.split("").reverse().join("");

}
<!-- Change the argument to check for other strings -->
<button type="button" onclick="alert(palindrome('naman'));">Click Me<utton>

如果字符串是回文,则上述函数将返回true。否则,它将返回false。

答案 48 :(得分:0)

我的简短解决方案,长度为66个字符。结果:是真还是假。

<input type="text" id="temp">
<p id="data">data to copy<p>
<button>Copy</button>

答案 49 :(得分:0)

或者你可以这样做。

pos

答案 50 :(得分:0)

我认为这种实现几乎涵盖了所有情况。我希望它对某人有用:

isPalindrome("nurses run");
isPalindrome("abcdcba");
isPalindrome("hello world");
isPalindrome("  ");
isPalindrome(" ");
isPalindrome("");
isPalindrome(null);
isPalindrome();
isPalindrome(100);
isPalindrome({"name":"John"});

然后你可以尝试这些案例:

{{1}}

答案 51 :(得分:-2)

如何验证数字是否是回文?

我有我的功能,但不正确,因为它用于字符串而不是数字:

function palindrom(str){
  for(var i=0;i<str.length;i++){
    if(str[i]!==str[str.length-i-1]){
      return false;
    }
  }
  return true;
}

console.log(palindrom("121"));
console.log(palindrom("1234321"));
console.log(palindrom("3211432"));