C++ 中检查字符串是否为回文数的递归函数


给定一个字符串 Str 作为输入。目标是使用递归函数查找输入字符串是否为回文词。回文串是指从前向后或从后向前读取形成相同单词的字符串。长度为 0 的字符串被认为是回文串。反转回文串的字符会形成与原始字符串相同的字符串。

回文串的例子:- madam、abcba、malayalam 等

示例

输入 - Str = “malayalam”

输出 - 输入字符串是回文串。

解释 -

Str[ 0 到 8 ] = malayalam

反转 Str [ 8 到 0 ] = malayalam

两个字符串相同。

输入 - Str = “tutorial”

输出 - 输入字符串不是回文串。

解释 -

Str[ 0 到 7 ] = tutorial

反转 Str [ 7 到 0 ] = lairotut

两个字符串不同

下面程序中使用的方法如下

在这种方法中,我们将检查字符串是否包含单个字符,如果为真,则它是回文串。如果不是,则递归遍历整个字符串以获取其余字符,并在对应字符不同时中断递归。

  • 获取输入字符串 Str[] 并计算其长度。

  • 如果长度为 0,则设置 result=1。

  • 否则设置 result=checkPalindrome(Str, 0, length - 1),其中 0 是第一个索引,length - 1 是最后一个索引

  • 函数 checkPalindrome(char str[], int first, int last) 如果任何字符与其在字符串中的对应字符不匹配,则返回 0。

  • 如果索引 first 和 last 相同,则字符串只有一个字符,然后返回 1。

  • 如果不是,则检查除结束字符之外的其余字符,方法是 first++,last-- 并递归调用 checkPalindrome(str, first, last)。

  • 在所有递归结束时,我们将获得一个结果。

  • 如果它是 1,则输入字符串是回文串。

  • 否则输入字符串不是回文串。

  • 在 main 中打印结果。

示例

#include <bits/stdc++.h>
using namespace std;
int checkPalindrome(char str[], int first, int last){
   if (first < last + 1){
      first++;
      last--;
      return checkPalindrome(str, first, last);
   }

   if (first == last){
      return 1;
   }
   if (str[first] != str[last]){
      return 0;
   }
   return 1;
}
// Driver Code
int main(){
   char Str[] = "madam";
   int result;
   int length = strlen(Str);
   if (length == 0){
      result=1;
   }

   else{
      result=checkPalindrome(Str, 0, length - 1);
   }
   if (result==1){
      cout << "Input string is palindrome.";
   }
   else{
      cout << "Input string is not a palindrome.";
   }
   return 0;
}

输出

如果我们运行以上代码,它将生成以下输出

Input string is palindrome.

更新于: 2021年11月2日

6K+ 浏览量

开启你的 职业生涯

通过完成课程获得认证

立即开始
广告

© . All rights reserved.