首页 > 解决方案 > 如何创建一个检查每个子字符串的递归函数?

问题描述

如何使用递归函数找到任何给定字符串中的所有子字符串?我知道如何使用 2 个 for 循环来做到这一点,但我不知道如何使用递归来做到这一点。需要检查每个子字符串是否为回文。这是我的非迭代解决方案。

console.log(palindromeIterative("madam"));

function palindromeIterative(word) {
  let noOfP = 0;

  for (let i = 0; i < word.length; i++) {
    for (let j = i + 1; j <= word.length; j++) {
      noOfP = palindromeIterativeHelper(word.substring(i, j), noOfP);
    }
  }

  return noOfP;
}

function palindromeIterativeHelper(word, noOfP) {
  if (word === word.split("").reverse().join("") && word.length > 1) {
    console.log(word);
    noOfP++;
  }

  return noOfP;
}

标签: javascriptrecursionpalindrome

解决方案


这是递归版本。这可能不是最佳优化的解决方案,但这将解决上述问题。

let str = "forgeeksskeegfor"
let noOfP = 0;
let getSubstrings = (str) => {
  let countPalindrome = (str) => {
    if (str.length < 2)
      return
    else {
      if (str == str.split("").reverse().join("")) {
        console.log(str);
        noOfP++;
      }
      countPalindrome(str.substring(0, str.length - 1))
    }
  }
  countPalindrome(str)
  if (str.length < 2) {
    return noOfP;
  }
  return getSubstrings(str.substring(1))
}
console.log(`Total Palindromes : ${getSubstrings(str)}`)


推荐阅读