📜  构建字典序上最小的回文

📅  最后修改于: 2022-05-13 01:57:07.779000             🧑  作者: Mango

构建字典序上最小的回文

给定字符串小写字母。给定字符串的某些字符已损坏,现在由 * 表示。我们可以将 * 替换为任何小写字母。你必须构造字典上最小的回文字符串。如果不可能构造回文,则打印“不可能”。
例子:

Input : str[] = "bc*b" 
Output : bccb

Input : str[] = "bc*a*cb"
Output : bcaaacb

Input : str[] = "bac*cb"
Output : Not Possible

从两端开始遍历字符串。假设 i=0,j=strlen-1,在每次迭代后不断增加 i 并减少 j,直到 i 超过 j。现在在任何中间位置,我们有五种可能的情况:

  1. str[i] 和 str[j] 都相同,也不等于 '*'。在这种情况下,只需继续。
  2. str[i] 和 str[j] 都相同并且等于 '*'。在这里,您必须填写 str[i] = str[j] = 'a' 以获得最小的可能回文。
  3. str[i] 等于 '*' 并且 str[j] 是一些字母表。这里填充 str[i] = str[j] 使我们的字符串成为回文。
  4. str[j] 等于 '*' 并且 str[i] 是一些字母表。这里填充 str[j] = str[i] 使我们的字符串成为回文。
  5. str[i] 不等于 str[j] 并且两者都是一些字母表。在这种情况下,回文构造是不可能的。因此,打印“不可能”并从循环中中断。

在 i 超过 j 之后,意味着我们已经得到了所需的回文。否则我们得到“不可能”的结果。

C++
// CPP for constructing smallest palindrome
#include 
using namespace std;
 
// function for printing palindrome
string constructPalin(string str, int len)
{
    int i = 0, j = len - 1;
 
    // iterate till i


Java
// Java for constructing smallest palindrome
class GFG
{
 
// function for printing palindrome
static String constructPalin(char []str, int len)
{
    int i = 0, j = len - 1;
 
    // iterate till i


Python3
# Python3 for constructing smallest palindrome
 
# function for printing palindrome
def constructPalin(string, l):
    string = list(string)
    i = -1
    j = l
     
    # iterate till i


C#
// C# for constructing smallest palindrome
using System;
 
class GFG
{
 
// function for printing palindrome
static String constructPalin(char []str, int len)
{
    int i = 0, j = len - 1;
 
    // iterate till i


PHP


Javascript


输出:

bcacxcacb