按字典顺序,给定字符串的所有最短回文子字符串

2021年5月14日16:29:46 发表评论 965 次浏览

本文概述

给定一个字符串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)


木子山

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: