构建字典序上最小的回文
给定字符串小写字母。给定字符串的某些字符已损坏,现在由 * 表示。我们可以将 * 替换为任何小写字母。你必须构造字典上最小的回文字符串。如果不可能构造回文,则打印“不可能”。
例子:
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。现在在任何中间位置,我们有五种可能的情况:
- str[i] 和 str[j] 都相同,也不等于 '*'。在这种情况下,只需继续。
- str[i] 和 str[j] 都相同并且等于 '*'。在这里,您必须填写 str[i] = str[j] = 'a' 以获得最小的可能回文。
- str[i] 等于 '*' 并且 str[j] 是一些字母表。这里填充 str[i] = str[j] 使我们的字符串成为回文。
- str[j] 等于 '*' 并且 str[i] 是一些字母表。这里填充 str[j] = str[i] 使我们的字符串成为回文。
- 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