检查字符串的后缀和前缀是否为回文
给定一个字符串's',任务是检查该字符串是否同时具有长度大于 1 的前缀和后缀子串,它们都是回文。
如果满足上述条件,则打印“YES”,否则打印“NO”。
例子:
Input : s = abartbb
Output : YES
Explanation : The string has prefix substring 'aba'
and suffix substring 'bb' which are both palindromes, so the output is 'YES'.
Input : s = abcc
Output : NO
Explanation : The string has no prefix substring which is palindrome,
it only has a suffix substring 'cc' which is a palindrome.
So the output is 'NO'.
方法:
- 首先,检查所有长度 > 1 的前缀子串,以查找是否有任何回文。
- 还要检查所有后缀子字符串。
- 如果两个条件都为真,则输出为“是”。
- 否则,输出为“否”。
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function to check whether
// the string is a palindrome
bool isPalindrome(string r)
{
string p = r;
// reverse the string to
// compare with the
// original string
reverse(p.begin(), p.end());
// check if both are same
return (r == p);
}
// Function to check whether the string
// has prefix and suffix substrings
// of length greater than 1
// which are palindromes.
bool CheckStr(string s)
{
int l = s.length();
// check all prefix substrings
int i;
for (i = 2; i <= l; i++) {
// check if the prefix substring
// is a palindrome
if (isPalindrome(s.substr(0, i)))
break;
}
// If we did not find any palindrome prefix
// of length greater than 1.
if (i == (l+1))
return false;
// check all suffix substrings,
// as the string is reversed now
i = 2;
for (i = 2; i <= l; i++) {
// check if the suffix substring
// is a palindrome
if (isPalindrome(s.substr(l-i, i)))
return true;
}
// If we did not find a suffix
return false;
}
// Driver code
int main()
{
string s = "abccbarfgdbd";
if (CheckStr(s))
cout << "YES\n";
else
cout << "NO\n";
return 0;
}
Java
// Java implementation of the approach
import java.util.*;
class GFG
{
static String reverse(String input)
{
char[] a = input.toCharArray();
int l, r = 0;
r = a.length - 1;
for (l = 0; l < r; l++, r--)
{
// Swap values of l and r
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return String.valueOf(a);
}
// Function to check whether
// the string is a palindrome
static boolean isPalindrome(String r)
{
String p = r;
// reverse the string to
// compare with the
// original string
p = reverse(p);
// check if both are same
return (r.equals(p));
}
// Function to check whether the string
// has prefix and suffix substrings
// of length greater than 1
// which are palindromes.
static boolean CheckStr(String s)
{
int l = s.length();
// check all prefix substrings
int i;
for (i = 2; i <= l; i++)
{
// check if the prefix substring
// is a palindrome
if (isPalindrome(s.substring(0, i)))
{
break;
}
}
// If we did not find any palindrome prefix
// of length greater than 1.
if (i == (l + 1))
{
return false;
}
// check all suffix substrings,
// as the string is reversed now
i = 2;
for (i = 2; i <=l; i++)
{
// check if the suffix substring
// is a palindrome
if (isPalindrome(s.substring(l-i,l)))
{
return true;
}
}
// If we did not find a suffix
return false;
}
// Driver code
public static void main(String args[])
{
String s = "abccbarfgdbd";
if (CheckStr(s))
{
System.out.println("Yes");
}
else
{
System.out.println("No");
}
}
}
// This code is contributed by Rajput-Ji
Python3
# Python3 implementation of the approach
# Function to check whether
# the string is a palindrome
def isPalindrome(r):
# Reverse the string and assign
# it to new variable for comparison
p = r[::-1]
# check if both are same
return r == p
# Function to check whether the string
# has prefix and suffix substrings
# of length greater than 1
# which are palindromes.
def CheckStr(s):
l = len(s)
# check all prefix substrings
i = 0
for i in range(2, l + 1):
# check if the prefix substring
# is a palindrome
if isPalindrome(s[0:i]) == True:
break
# If we did not find any palindrome
# prefix of length greater than 1.
if i == (l + 1):
return False
# check all suffix substrings,
# as the string is reversed now
for i in range(2, l + 1):
# check if the suffix substring
# is a palindrome
if isPalindrome(s[l - i : l]) == True:
return True
# If we did not find a suffix
return False
# Driver code
if __name__ == "__main__":
s = "abccbarfgdbd"
if CheckStr(s) == True:
print("YES")
else:
print("NO")
# This code is contributed by Rituraj Jain
C#
// C# implementation of the approach
using System;
class GFG
{
static String reverse(String input)
{
char[] a = input.ToCharArray();
int l, r = 0;
r = a.Length - 1;
for (l = 0; l < r; l++, r--)
{
// Swap values of l and r
char temp = a[l];
a[l] = a[r];
a[r] = temp;
}
return String.Join("",a);
}
// Function to check whether
// the string is a palindrome
static Boolean isPalindrome(String r)
{
String p = r;
// reverse the string to
// compare with the
// original string
p = reverse(p);
// check if both are same
return (r.Equals(p));
}
// Function to check whether the string
// has prefix and suffix substrings
// of length greater than 1
// which are palindromes.
static Boolean CheckStr(String s)
{
int l = s.Length;
// check all prefix substrings
int i;
for (i = 2; i <= l; i++)
{
// check if the prefix substring
// is a palindrome
if (isPalindrome(s.Substring(0, i)))
{
break;
}
}
// If we did not find any palindrome prefix
// of length greater than 1.
if (i == (l + 1))
{
return false;
}
// check all suffix substrings,
// as the string is reversed now
i = 2;
for (i = 2; i <=l; i++)
{
// check if the suffix substring
// is a palindrome
if (isPalindrome(s.Substring(l-i,i)))
{
return true;
}
}
// If we did not find a suffix
return false;
}
// Driver code
public static void Main(String []args)
{
String s = "abccbarfgdbd";
if (CheckStr(s))
{
Console.WriteLine("Yes");
}
else
{
Console.WriteLine("No");
}
}
}
// This code is contributed by 29AjayKumar
PHP
Javascript
输出:
YES
复杂度:O(n^2)