Javascript 计算一个字符串中有多少子字符串是回文

Javascript 计算一个字符串中有多少子字符串是回文,javascript,Javascript,我目前正试图计算出给定字符串中有多少子字符串是回文 当给定字符串aabaa时,预期输出为5,而我的代码输出为4。我不太清楚为什么,有人能帮我解决这个问题吗 我的代码: function countPalindromesInString(s) { let count = 0; if (s === s.split('').reverse().join('')) { count += 1; } let testStr = ''; for (l

我目前正试图计算出给定字符串中有多少子字符串是回文

当给定字符串aabaa时,预期输出为5,而我的代码输出为4。我不太清楚为什么,有人能帮我解决这个问题吗

我的代码:

function countPalindromesInString(s) {
    let count = 0;

    if (s === s.split('').reverse().join('')) {
        count += 1;
    }

    let testStr = '';
    for (let i = 0; i < s.length; i++) {
        testStr += s[i];

        if (testStr === testStr.split('').reverse().join('')) {
            count += 1;
        }
    }
    return count;
}
函数countPalindromesInString(s){
让计数=0;
如果(s===s.split(“”).reverse().join(“”)){
计数+=1;
}
设testStr='';
for(设i=0;i
我不确定您为什么希望输入aabaa的输出5。 从我的观点来看,如果你认为一个字母作为回文,输出应该是<强> 9 < /强>,否则结果应该是<强> 4 < /强>:“AA”、“AA”、“ABA”、“AABAA”。您的代码仅从左到右计数,并且在开始时对完整的5个字母字符串进行双重计数,如下所示:

if(s===s.split(“”).reverse().join(“”)){
计数+=1;
}

并且在for循环中为案例i=4

以下是您问题的解决方案:

function countPalindromesInString(s) {
    let count = 0;  //or s.length if you chose to count single letters as palindrome
    let subString;

    for (let i = 1; i < s.length; i++) {
      for(let j = 0; j < s.length - i; j++) {
        subString = s.substring(j, j+i+1);
        if(subString === subString.split('').reverse().join('')) {
            count += 1;
        }
      }
    }
    return count;
}
函数countPalindromesInString(s){
让count=0;//或s.length,如果选择将单个字母计数为回文
让子串;
for(设i=1;i
稍后编辑:

如果我们要计算字符串中的唯一回文,我们可以将在数组中找到的回文存储起来,每次找到另一个回文时,我们都会检查它是否以前添加过:

function countPalindromesInString(s) {
    let subStrings = [];

    for (let i = 0; i < s.length; i++) {
      for(let j = 0; j < s.length - i; j++) {
        let subString = s.substring(j, j+i+1);
        if(subString === subString.split('').reverse().join('') && !subStrings.includes(subString)) {
          subStrings.push(subString);
        }
      }
    }
    return subStrings.length;
}
函数countPalindromesInString(s){
设子串=[];
for(设i=0;i
打印您找到的字符串,您应该会发现问题所在?如果字符可以按任意顺序组合,则首先需要所有排列。你只是从左到右工作right@charlietfl我假设,因为我在迭代时反转了字符串,所以这无关紧要,或者情况并非如此?取决于赋值的约束条件。谢谢你的回答,我已经找到了为什么输出应该是5。基本上,我需要找到不同的子字符串,所以没有重复。输入aabaa应为a、aa、aabaa、aba、b,因此为输出5。如何修改您的答案以实现此目的?将找到的所有回文存储在一个数组中。要确保它们是唯一的,请检查新发现的回文是否以前添加到数组中。我编辑了答案并为您的问题添加了可能的解决方案。