本文概述
给定一个字符串s在大小上是N。任务是从给定的字符串按字典顺序查找所有最短的回文子字符串。
例子:
输入:s ="programming"
输出:a g i n o p r
说明:单词"programming"的词典学上最短回文子字符串将是给定字符串中的单个字符。因此, 输出为:a g i m n o p r。
输入:s ="lsbin"
输出:e f g k o r s
方法:
为了解决上述问题, 最先观察到的是, 最短回文子字符串的大小为1。因此, 根据问题陈述, 我们必须按字典顺序找到大小为1的所有不同子字符串, 这意味着给定字符串中的所有字符。
下面是上述方法的实现:
C ++
//C++ program to find Lexicographically all
//Shortest Palindromic Substrings from a given string
#include <bits/stdc++.h>
using namespace std;
//Function to find all lexicographically
//shortest palindromic substring
void shortestPalindrome(string s)
{
//Array to keep track of alphabetic characters
int abcd[26] = { 0 };
for ( int i = 0; i <s.length(); i++)
abcd展开 - 97] = 1;
//Iterate to print all lexicographically shortest substring
for ( int i = 0; i <26; i++) {
if (abcd[i] == 1)
cout <<char (i + 97) <<" " ;
}
}
//Driver code
int main()
{
string s = "lsbin" ;
shortestPalindrome(s);
return 0;
}
Java
//Java program to find Lexicographically all
//Shortest Palindromic Substrings from a given string
class Main
{
//Function to find all lexicographically
//shortest palindromic substring
static void shortestPalindrome(String s)
{
//Array to keep track of
//alphabetic characters
int [] abcd = new int [ 26 ];
for ( int i = 0 ; i <s.length(); i++)
abcd展开 = 1 ;
//Iterate to print all lexicographically
//shortest substring
for ( int i = 0 ; i <26 ; i++)
{
if (abcd[i] == 1 )
{
System.out.print(( char )(i + 97 ) + " " );
}
}
}
//Driver code
public static void main(String[] args)
{
String s = "lsbin" ;
shortestPalindrome(s);
}
}
Python3
# C++ program to find Lexicographically all
# Shortest Palindromic Substrings from a given string
# Function to find all lexicographically
# shortest palindromic substring
def shortestPalindrome (s) :
# Array to keep track of alphabetic characters
abcd = [ 0 ] * 26
for i in range ( len (s)):
abcd[ ord (s[i]) - 97 ] = 1
# Iterate to print all lexicographically shortest substring
for i in range ( 26 ):
if abcd[i] = = 1 :
print ( chr (i + 97 ), end = ' ' )
# Driver code
s = "lsbin"
shortestPalindrome (s)
C#
//C# program to find Lexicographically
//all shortest palindromic substrings
//from a given string
using System;
class GFG{
//Function to find all lexicographically
//shortest palindromic substring
static void shortestPalindrome( string s)
{
//Array to keep track of
//alphabetic characters
int [] abcd = new int [26];
for ( int i = 0; i <s.Length; i++)
abcd展开 - 97] = 1;
//Iterate to print all lexicographically
//shortest substring
for ( int i = 0; i <26; i++)
{
if (abcd[i] == 1)
{
Console.Write(( char )(i + 97) + " " );
}
}
}
//Driver code
static public void Main( string [] args)
{
string s = "lsbin" ;
shortestPalindrome(s);
}
}
//This code is contributed by AnkitRai01
输出如下:
e f g k o r s
时间复杂度:O(N), 其中N是字符串的大小。
空间复杂度:O(1)