web-dev-qa-db-ja.com

JavaScriptで回文を書く方法

Palindromeをjavascriptで書くにはどうすればよいでしょうか。さまざまな単語を入力し、Wordがpalindromeかどうかをプログラムで示します。たとえば、正午は回文ですが、悪い日は回文ではありません。

前もって感謝します。

29
edgar7
_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)に基づいて、指定されたWordが回文である場合に戻ります

更新:

パフォーマンスのため、この質問に対して賞金を用意しましたそして調査を行った結果は次のとおりです。

次のような非常に大量のデータを扱っている場合

_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
_

この例では、パリンドロームはTrueですが、注意してください

投稿された回文関数は、180〜210ミリ秒(現在の例では)の時間を提供し、string == string.split('').reverse().join('')メソッドで以下に投稿された関数は980〜1010ミリ秒を提供します。

マシンの詳細:

システム: Ubuntu 13.10 OSタイプ: 32ビットRAM: 2 Gb CPU: 3.4 Ghz * 2 ブラウザ: Firefox 27.0.1

43
tnanoba

これを試して:

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を変更する必要があります。

デモ!

13
aksu

このようなものを使用してください

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")); 
9
kiranvj

これを見てください:

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;
} 

編集:Wordの最後の部分と比較するために最大で半分のWordのみを反復処理するため、比較の半分の操作が実行されます。大容量データの高速化!!!

文字列はcharの配列であるため、charAt関数を使用する必要はありません!!!

リファレンス: http://wiki.answers.com/Q/Javascript_code_for_palindrome

6

より速い方法:

-ループの半分を計算します。

-毎回計算する代わりに、Wordの長さを変数に保存します。

編集:(mvw)によって指摘されるように、ループ内のすべての時間を計算しないように、Wordの長さ/ 2を一時変数に格納します。

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;
} 
6
Sai

回文の再帰的な定義から始めましょう。

  1. 空の文字列 ''は回文です
  2. 文字cで構成される文字列、つまり「c」は回文です
  3. 文字列sが回文である場合、一部の文字cの文字列 'c' + s + 'c'は回文です

この定義は、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シェル用の追加のテストコードを示します。デバッガーを使用する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;
}
5
mvw

これで刺します。ただし、パフォーマンスを測定するのは難しいです。

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を割り当てると、Strings可変長であり、割り当てがより複雑になる場合があります。また、( saiで示されているように )の途中でのみ反復する必要があるためです。また、長さが奇数の場合(例:'aba')、中央の文字は常に問題ありません。

3
tiffon

技術テストを解決する際に行うべき最も重要なことはショートカットメソッドを使用しない-アルゴリズムの考え方を確認したい!メソッドの使用ではない

ここに私が思いついたものがあります(テストを吹いてから45分後)。ただし、いくつかの最適化が必要です。アルゴリズムを記述するときは、falseを想定し、trueに見える場合はロジックを変更するのが最善です。

isPalindrome()

基本的に、これをO(N)(線形)複雑度で実行するには、ベクトルが向いている2iteratorsが必要ですお互い。つまり、先頭から始まり、最後から始まる1つのイテレータが、それぞれ内側に向かって移動します。イテレータに配列全体を走査させ、break/returnの条件を使用して、それらが途中で一致するようにすることもできますが、各イテレータにhalf-lengthデフォルトで。

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を返すように、すべてのロジックを反転する必要があります。また、1つのショートカットメソッドString.prototype.charAt(n)を使用しましたが、すべての言語がネイティブにこのメソッドをサポートしているため、これで問題ないと感じました。

2
Cody

文字列をチェックする最善の方法は、大文字小文字や特殊文字などの基準を備えた回文です...

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

次の単語と文字列でテストし、より具体的な結果を得ることができます。
1。ボブ
2。ドク、メモ、私は反対します。断食は太りすぎを防ぎません。タラでダイエット

文字列の場合、特殊文字は無視され、文字列が小文字に変換されます。

2
Mihir Vadalia
    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;
    }
1
siddharth jha

これはどう?

function pall (Word) {

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

    return rev.startsWith(lowerCWord);
    }

pall('Madam');
1
TheBilTheory

または、このようにすることもできます。

var palindrome = Word => Word == Word.split('').reverse().join('')
1
Alex Cory

この関数は、英数字以外の文字(句読点、スペース、記号)をすべて削除し、回文をチェックするためにすべて小文字にします。

function palindrome(str){

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

}
1
viveknaskar
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;
}

半分の文字列の解析と定数値変数に最適化されています。

1
neural5torm

これは、String.reverseを使用しないワンライナーです。

const isPal = str => Array
  .apply(null, new Array(strLen = str.length))
  .reduce((acc, s, i) => acc + str[strLen - (i + 1)], '') === str;
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);
}

ここで私の完全な説明を参照してください。

1
Jason Sebring

これを行う別の方法を次に示します。

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

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");
1
Anand Manhas

O(log n)の時間の複雑さを持つ関数をフォローする方が良いと思います。

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

1
Kashyap

コードは簡潔かつ迅速で理解しやすいものです。

TL; DR

説明 :

ここで、isPalindrome関数は、typeof文字列であるstrパラメーターを受け入れます。

  1. Strパラメータの長さが1以下の場合、単に「false」を返します。
  2. 上記のケースがfalseの場合、2番目の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.
    _

不等式の結果がtrueの場合、先に進み、falseを返します。

  1. 前のステートメントの結果がfalseの場合、最終結果までisPalindrome(str)関数を繰り返し呼び出します。
_        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>_
0
Sagar Munjal

私が使用するもの:-

function isPalindrome(arg){
    for(let i=0;i<arg.length;i++){
        if(arg[i]!==arg[(arg.length-1)-i]) 
          return false;
    return true;
}}
0
Subhash Saini
function palindrome(s) {
  var re = /[\W_]/g;
  var lowRegStr = s.toLowerCase().replace(re, '');
  var reverseStr = lowRegStr.split('').reverse().join(''); 
  return reverseStr === lowRegStr;
}

このJSPerfがコードのパフォーマンスをどのようにチェックするのかわかりません。文字列を逆にして値を確認しようとしました。この方法の長所と短所についてコメントしてください。

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パフォーマンステスト

0
SVS
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");
0
iamsohel

以下のコードは、textBoxから文字列を取得する方法と、それが回文ではないかどうかを示し、別のテキストボックスに回答を表示します

<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>  
0
kumar
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
  }
0
Faris

文字列が回文であるかどうかを確認する1行のプログラムを次に示します。

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

このIIFEの最後のパラメーターを変更して、異なる入力をチェックするだけです。これがおそらく最良のソリューションです。

0
RITWICK HALDER

ES6の方法。配列メソッドreduceRightを利用して文字列を反転することに注意してください(低レベルである文字列をコンテキストとして指定すると、文字列に配列メソッドを使用できます-文字列は文字の配列です)。いいえ、他のソリューションほどパフォーマンスはよくありませんが、es6以上の高次関数を使用して答えが出てこなかったので、これをそこに投げると思いました。

const palindrome = str => {
  const middle = str.length/2;
  const left = str.slice(0, middle)
  const right = Array.prototype.reduceRight.call(str.slice(Math.round(middle)), (str, char) => str + char, '')
  return left === right;
}
0
function Palindrome(str) {
  let forwardStr = str.toLowerCase().replace(/[\W_]/g, '');
  let reversedStr = forwardStr.split('').reverse().join();

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

次のようなこともできます:

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;
}
}
0
FNunez

ES6機能を使用して文字列回文をチェックするための最適で堅牢なソリューションを次に示します。

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

この実装はほとんどすべてのケースをカバーすると思います。私はそれが誰かに役立つことを願っています:

function isPalindrome(Word){
    if(typeof Word === 'undefined' || Word === null){
        console.log("argument is undefined");
        return;
    }

    if(typeof Word === 'string'){

       Word = Word.replace(/\s/gi,"");

     if(Word.length < 1){
        console.log("wrong argument");
        return;
      }

      if(Word.length === 1){
        console.log("It's palindrome!");
        return;
      }

      for(var i=0;i<Math.floor(Word.length/2);i++){

        if(Word[i] !== Word[word.length - 1 - i]){
          console.log("It's not palindrome");
          return;
        }
      }
      console.log("It's palindrome");

    }else{

       console.log("argument must be a string");

    }

}

そして、あなたはこれらのケースで試すことができます:

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

/ *次の関数は、以下のタスクを実行します。

 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);
}
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;
    }
}
0
Cis Dev

これらすべてのループ!いくつかの機能的な利点はどうですか?

function isPalendrome(str){
    var valid = false;
    if(str.length < 2 ) return true;
    function even(i,ii){
        str[i]===str[ii] ? ((i+1 !== ii) ? even(i+1,ii-1) : valid = true) : null
    }
    function odd(i, ii){
        str[i]===str[ii] ? ((i !== ii) ? odd(i+1,ii-1) : valid = true) : null
    }
    if(str.length % 2){
        return odd(0,str.length-1),valid;
    }else{
        return even(0,str.length-1),valid;
    }
}

コールスタックをテストするには、このコードを実行して、コールスタックサイズの2倍の文字列を解析できます。

function checkStackSize(){
    var runs = 70000;
    var max_process = 1;
    var max = 0;
    function recurse_me() {
        max_process++;
        if(max_process === runs) return;
        max = max_process;
        try {
            recurse_me()
        } catch(e) {
            max =  max_process;
        }
    }
    recurse_me()
    console.log(max);
}

問題の対称的な性質により、外部から文字列をチャンクし、コールスタック制限内のチャンクを処理できます。

つまり、回文長が1000であれば、0〜250と750〜1000を結合し、250〜499と500〜749を結合できます。その後、各チャンクを関数に渡すことができます。これの利点は、非常に大きなデータセットのWebワーカーまたはスレッドを使用してプロセスを並行して実行できることです。

0
elev8ed

私の短い解決策は、66文字の長さです。結果:trueまたはfalse。

function isPalindrome(s) {
  s=s.toLowerCase().match(/\w/g);
  return s.join()==s.reverse().join();
}
0

パフォーマンスを向上させるために、これも使用できます

function palindrome(str) {
 str = str.split("");
 var i = str.length;
 var check = "Yes"
 if (i > 1) {
    for (var j = 0; j < i / 2; j++) {
        if (str[j] != str[i - 1 - j]) {
            check = "NO";
            break;
           }
        }
        console.log(check);
    } else {
    console.log("YES");
  }
}
0
Himanshu Teotia

特殊文字のエラーを回避するには、以下のこの関数を使用します

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;
  }
}
0

文字列が回文であるかどうかを確認する簡単な1行のコード:

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を返します。

0
Akash Kriplani
    function reversName(name){
            return name
                  .split('')
                  .reverse()
                  .join('') === name ;
    };
    console.log(reversName('suus'));
    console.log(reversName('suusss'));
0
sudheer nunna
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;
}
0
Esom

注:これは大文字と小文字が区別されます

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/

_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";
_

この行をconsole.logする場合、console.log(str[i] + " and " + str[str.length - 1 - i])、ifステートメントの前に、_(str[str.length - 1 - i])_が何であるかがわかります。これは最も紛らわしい部分だと思いますが、コンソールでチェックアウトすると簡単にわかります。

0
Camilo Ordonez

これは、文字列の両端が外に出るようにテストし、対称性の欠如が検出されるとすぐに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;
};
0
John Escobedo