检查字符串是否为回文的递归函数
给定一个字符串,编写一个递归函数来检查给定的字符串是否是回文,否则,不是回文。
例子:
Input : malayalam
Output : Yes
Reverse of malayalam is also
malayalam.
Input : max
Output : No
Reverse of max is not max.
我们在这里讨论了一个迭代函数。
递归函数的想法很简单:
1) If there is only one character in string
return true.
2) Else compare first and last characters
and recur for remaining substring.
下面是上述思想的实现:
C++
// A recursive C++ program to
// check whether a given number
// is palindrome or not
#include
using namespace std;
// A recursive function that
// check a str[s..e] is
// palindrome or not.
bool isPalRec(char str[],
int s, int e)
{
// If there is only one character
if (s == e)
return true;
// If first and last
// characters do not match
if (str[s] != str[e])
return false;
// If there are more than
// two characters, check if
// middle substring is also
// palindrome or not.
if (s < e + 1)
return isPalRec(str, s + 1, e - 1);
return true;
}
bool isPalindrome(char str[])
{
int n = strlen(str);
// An empty string is
// considered as palindrome
if (n == 0)
return true;
return isPalRec(str, 0, n - 1);
}
// Driver Code
int main()
{
char str[] = "geeg";
if (isPalindrome(str))
cout << "Yes";
else
cout << "No";
return 0;
}
// This code is contributed by shivanisinghss2110
C
// A recursive C program to
// check whether a given number
// is palindrome or not
#include
#include
#include
// A recursive function that
// check a str[s..e] is
// palindrome or not.
bool isPalRec(char str[],
int s, int e)
{
// If there is only one character
if (s == e)
return true;
// If first and last
// characters do not match
if (str[s] != str[e])
return false;
// If there are more than
// two characters, check if
// middle substring is also
// palindrome or not.
if (s < e + 1)
return isPalRec(str, s + 1, e - 1);
return true;
}
bool isPalindrome(char str[])
{
int n = strlen(str);
// An empty string is
// considered as palindrome
if (n == 0)
return true;
return isPalRec(str, 0, n - 1);
}
// Driver Code
int main()
{
char str[] = "geeg";
if (isPalindrome(str))
printf("Yes");
else
printf("No");
return 0;
}
Java
// A recursive JAVA program to
// check whether a given String
// is palindrome or not
import java.io.*;
class GFG
{
// A recursive function that
// check a str(s..e) is
// palindrome or not.
static boolean isPalRec(String str,
int s, int e)
{
// If there is only one character
if (s == e)
return true;
// If first and last
// characters do not match
if ((str.charAt(s)) != (str.charAt(e)))
return false;
// If there are more than
// two characters, check if
// middle substring is also
// palindrome or not.
if (s < e + 1)
return isPalRec(str, s + 1, e - 1);
return true;
}
static boolean isPalindrome(String str)
{
int n = str.length();
// An empty string is
// considered as palindrome
if (n == 0)
return true;
return isPalRec(str, 0, n - 1);
}
// Driver Code
public static void main(String args[])
{
String str = "geeg";
if (isPalindrome(str))
System.out.println("Yes");
else
System.out.println("No");
}
}
// This code is contributed
// by Nikita Tiwari
Python
# A recursive Python program
# to check whether a given
# number is palindrome or not
# A recursive function that
# check a str[s..e] is
# palindrome or not.
def isPalRec(st, s, e) :
# If there is only one character
if (s == e):
return True
# If first and last
# characters do not match
if (st[s] != st[e]) :
return False
# If there are more than
# two characters, check if
# middle substring is also
# palindrome or not.
if (s < e + 1) :
return isPalRec(st, s + 1, e - 1);
return True
def isPalindrome(st) :
n = len(st)
# An empty string is
# considered as palindrome
if (n == 0) :
return True
return isPalRec(st, 0, n - 1);
# Driver Code
st = "geeg"
if (isPalindrome(st)) :
print "Yes"
else :
print "No"
# This code is contributed
# by Nikita Tiwari.
C#
// A recursive C# program to
// check whether a given number
// is palindrome or not
using System;
class GFG
{
// A recursive function that
// check a str(s..e)
// is palindrome or not.
static bool isPalRec(String str,
int s,
int e)
{
// If there is only one character
if (s == e)
return true;
// If first and last character
// do not match
if ((str[s]) != (str[e]))
return false;
// If there are more than two
// characters, check if middle
// substring is also
// palindrome or not.
if (s < e + 1)
return isPalRec(str, s + 1,
e - 1);
return true;
}
static bool isPalindrome(String str)
{
int n = str.Length;
// An empty string is considered
// as palindrome
if (n == 0)
return true;
return isPalRec(str, 0, n - 1);
}
// Driver Code
public static void Main()
{
String str = "geeg";
if (isPalindrome(str))
Console.Write("Yes");
else
Console.Write("No");
}
}
// This code is contributed by Nitin Mittal.
PHP
Javascript
C++
#include
using namespace std;
bool isPalindrome(string s, int i){
if(i > s.size()/2){
return true ;
}
return s[i] == s[s.size()-i-1] && isPalindrome(s, i+1) ;
}
int main()
{
string str = "geeg" ;
if (isPalindrome(str, 0))
cout << "Yes";
else
cout << "No";
return 0;
}
输出
Yes
另一种方法:
基本上在遍历时检查第 i 个和第 ni-1 个索引是否相等。
如果不相等,则返回 false,如果它们相等,则继续递归调用。
C++
#include
using namespace std;
bool isPalindrome(string s, int i){
if(i > s.size()/2){
return true ;
}
return s[i] == s[s.size()-i-1] && isPalindrome(s, i+1) ;
}
int main()
{
string str = "geeg" ;
if (isPalindrome(str, 0))
cout << "Yes";
else
cout << "No";
return 0;
}
输出
Yes
时间复杂度: O(n)
辅助空间: O(n)