Dəyişdirildikdən sonra ən kiçik Palindrom

Çətinlik səviyyəsi Asan
Tez-tez soruşulur Çiy kərpic Arcezium Flipkart GE Healthcare ZScaler
Palindrom SimBaxılıb 357

Problem bəyanat

“Dəyişdirildikdən Sonra Ən Kiçik Palindrom” probleminə giriş verdik sim kiçik hərflərin simvollarını və nöqtələrini (.) ehtiva edir. Bütün nöqtələri bəzi əlifba işarələri ilə elə dəyişdirməliyik ki, nəticələnən sətir palindrom olsun. The palindrom olmalıdır leksikoqrafik cəhətdən ən kiçik.

Giriş Formatı

Giriş sətrini ehtiva edən ilk və yalnız bir sətir.

Çıxış formatı

Palindrom olan ən kiçik lüğət lüğətini çap edin. Əgər belə bir simli yaranmırsa, yazdırın "Mümkün deyil".

Məhdudiyyətlər

  • 1 <= | s | <= 10 ^ 6
  • s [i] kiçik əlifba simvolları və ya nöqtədir ”.

misal

a..b.a
aabbaa

Explanation: Bu simli üçün ən kiçik palindromdur “Aabbaa”. Burada hər ikisi də nöqtədirsə (.) Olduqda s [i] və s [n-1-i] 'a' ilə əvəz edirik. Bunlardan biri nöqtəli bir xarakterdirsə, onu başqa nöqtəli olmayan bir simvolla əvəz edin.

a..b.c
Not possible

Explanation: Bu sətirdə asanlıqla birinci və son cizgilərin eyni olmadığını görə bilərik, çünki bu sətri palindrom sətirinə çevirə bilmərik. Beləliklə, cavabı belə yazırıq "Mümkün deyil".

Dəyişdirildikdən sonra ən kiçik palindrom üçün alqoritm

1. Nöqtə simvollarını nəzərə almadan cüt nöqtəli simvolları yoxlayın.

  •  Sol və sağ hər ikisi nöqtə deyilsə və bərabər deyilsə, False qaytarın.
  • Başqa, ortaya qədər keçin.
  • Doğru qayıdın, sona çatsa.

2. Hər iki 'i' və 'ni-1' mövqeləri nöqtələrdirsə, onları 'a' ilə əvəzləyin.

3. Başqa bir şey, bunlardan biri nöqtəli bir xarakterdirsə, onu başqa bir nöqtə olmayan simvolla əvəz edin.

4. Son simli qaytarın.

Həyata keçirilməsi

Dəyişdirildikdən Sonra Ən Kiçik Palindrom üçün C ++ proqramı

#include<bits/stdc++.h>
using namespace std;
int main()
{
   string s;
   cin>>s;
   int n=s.length();
   int flag=0;
   for(int i=0;i<n/2;i++)
   {
       if(s[i]!='.' && s[n-1-i]!='.' && s[i]!=s[n-1-i])
       {
           flag=1;
           break;
       }
   }
   if(flag==1)
   {
       cout<<"Not possible"<<endl;
   }
   else
   {
       for(int i=0;i<n;i++)
       {
           if(s[i]=='.')
           {
               if(s[n-1-i]=='.')
               {
                   s[i]='a';
                   s[n-1-i]='a';
               }
               else
               {
                   s[i]=s[n-1-i];
               }
           }
       }
       cout<<s<<endl;
   }
   return 0;
}

Dəyişdirildikdən Sonra Ən Kiçik Palindrom üçün Java proqramı

import java.util.Scanner;

class sum {
    
    public static void main(String[] args) 
    {
        Scanner sr= new Scanner(System.in);
        String s = sr.next();
        int n = s.length();
        char a[] = s.toCharArray();
        int flag=0;
        for(int i=0;i<n/2;i++)
        {
            if(a[i]!='.' && a[n-1-i]!='.' && a[i]!=a[n-1-i])
            {
                flag=1;
                break;
            }
        }
        if(flag==1)
        {
            System.out.println("Not possible");
        }
        else
        {
            for(int i=0;i<n;i++)
            {
                if(a[i]=='.')
                {
                    if(a[n-1-i]=='.')
                    {
                        a[i]='a';
                        a[n-1-i]='a';
                    }
                    else
                    {
                        a[i]=a[n-1-i];
                    }
                }
            }
            for(int i=0;i<n;i++)
            {
                System.out.print(a[i]);
            }
            System.out.println();
        }
    } 
}
a..b.a
aabbaa

Dəyişdirildikdən Sonra Ən Kiçik Palindrom üçün Mürəkkəblik Analizi

Zamanın mürəkkəbliyi

O (n) hara n verilən sətrin ölçüsüdür "S". Burada yalnız verilən simli keçib bir neçə faydalı tapşırıq yerinə yetiririk.

Kosmik Mürəkkəblik

O (1) çünki burada əlavə yerdən istifadə etmirik. Bizi daimi kosmik mürəkkəbliyə aparır.

Translate »