2017-02-03 9 views
0

私がここで見つけた解決策の多くは、文字列が回文かどうかを確認した後、真または偽を与えています。文中の回文を特定する

function palindrome(myString){ 

    /* remove special characters, spaces and make lowercase*/ 
    var removeChar = myString.replace(/[^A-Z0-9]/ig, "").toLowerCase(); 

    /* reverse removeChar for comparison*/ 
    var checkPalindrome = removeChar.split('').reverse().join(''); 

    /* Check to see if myString is a Palindrome*/ 
    if(removeChar === checkPalindrome){ 

    document.write("<div>"+ myString + " is a Palindrome <div>"); 
    }else{ 

    document.write("<div>" + myString + " is not a Palindrome </div>"); 
    } 
    } 

    palindrome("Oh who was it I saw, oh who?") 
    palindrome("Madam") 
    palindrome("Star Wars") 

しかし、これは私が欲しいものはかなりありません:私は、文字列が回文であるかどうかをチェックする機能を持っています。文字列が回文かどうかをチェックするだけです。私はが真または偽ではなく文の中のすべての回文を識別するように関数を更新したいと思います。だからこのような文があるなら - "マダムとジョンは正午に出かけた"それは文の中の回文をリストする - "マダム、正午"

これについての助けになるだろう!なぜトリプル引用

+0

?私は自分の作品に ""見せてくれる@SergioAlen " –

+0

"私は見たのですか? " –

+0

これは非常にオープンに終わったようです。制限は何ですか?例えば、私は "Madam"、 "Am a"、 "t at"、 "noon"、 "oo"などの文章で、より多くの回文を見ることができます。 – Phil

答えて

1

function findPalindromes(str, min) { 
 
    min = min || 3; 
 
    var result = []; 
 
    var reg = str.toLowerCase(); 
 
    var reg = reg.replace(/[^a-z]/g, ''); // remove if you want spaces 
 
    var rev = reg.split("").reverse().join(""); 
 
    var l = reg.length; 
 
    for (var i = 0; i < l; i++) { 
 
    for (var j = i + min; j <= l; j++) { 
 
     var regs = reg.substring(i, j); 
 
     var revs = rev.substring(l - j, l - i); 
 
     if (regs == revs) { 
 
     result.push(regs); 
 
     } 
 
    } 
 
    } 
 
    return result; 
 
} 
 

 
var str1 = "Madam and John went out at noon"; 
 
console.log(str1, findPalindromes(str1)); 
 
var str2 = "\"Amore, Roma\" and \"There's no 'x' in Nixon\" are palindromes."; 
 
console.log(str2, findPalindromes(str2));

+0

ありがとうございました!私はあなたがこのスニペットを説明できるかどうか疑問に思っていました。 "min = min || 3;"最小の長さをチェックしていますか?私は知っている|| "OR"演算子です –

+1

|| OR演算子ですが、JSではnull合体演算子です。だから、もしあなたが 'min = min || 3 'の場合、minはその値がtrueyを評価する場合(例えばヌルでない場合)は元の値に設定され、falseの場合は3に設定されます(falseまたはnull値など)。 – Paul

-1
function findPalindromes(sentence) { 
    const words = sentence.replace(/[^\w\s]/gi, '').split(' '); 
    const palindromes = words.filter(isPalindrome); 
    return palindromes; 
} 

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

https://jsfiddle.net/ewezbz22/1/

+0

回文の背後にある一般的なアイデアは、句読点やスペースを無視することです。 – Phil

+0

@Philフィードバックありがとうございます。私は特殊文字を扱うために私の答えを更新しました。 –

関連する問題