Haga que la string sea lexicográficamente más pequeña y no palindrómica reemplazando exactamente un carácter

Dada una string palindrómica str que contiene solo letras minúsculas, la tarea es imprimir la string lexicográficamente más pequeña, reemplazando exactamente un carácter, de modo que la string no sea un palíndromo.
Ejemplos:
 

Entrada: str = “abccba” 
Salida: “aaccba” 
Explicación: 
Lexicográficamente, la string no palindrómica más pequeña posible es “aaccba”, aquí hemos reemplazado la segunda letra ‘b’ por una ‘a’ que la convierte en un no palíndromo.
Entrada: str = “a” 
Salida: -1 
Explicación: 
Un solo carácter es siempre un palíndromo, por lo que no podemos reemplazar el valor. Por lo tanto, la salida es -1. 
 

Enfoque: para resolver el problema mencionado anteriormente, verificaremos solo la mitad de la string y reemplazaremos todos los caracteres que no sean ‘a’ por el carácter ‘a’ en sí. El caso extremo de la pregunta es que si solo hay un carácter, devolveremos una string vacía. De lo contrario, si todos los caracteres son iguales, reemplazaremos el último carácter solo con el carácter ‘b’.
A continuación se muestra la implementación del enfoque anterior:
 

C++

// C++ program to make the string
// lexicographically smallest non
// palindromic string by replacing
// exactly one character
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to find the required string
string findStr(string S)
{
    // length of the string
    int n = S.size();
 
    // Iterate till half of the string
    for (int i = 0; i < n / 2; ++i) {
 
        // replacing a non 'a' char with 'a'
        if (S[i] != 'a') {
            S[i] = 'a';
 
            return S;
        }
    }
 
    // Check if there is no 'a' in string
    // we replace last char of string by 'b'
    S[n - 1] = 'b';
 
    // If the input is a single character
    return n < 2 ? " -1 " : S;
}
 
// Driver code
int main()
{
    string str = "a";
    cout << findStr(str) << endl;
 
    string str1 = "abccba";
    cout << findStr(str1) << endl;
 
    return 0;
}

Java

// Java program to make the string
// lexicographically smallest non
// palindromic string by replacing
// exactly one character
import java.util.*;
class GFG {
 
// Function to find the required string
static String findStr(String S)
{
    StringBuilder sb = new StringBuilder(S);
 
    // length of the string
    int n = sb.length();
 
    // Iterate till half of the string
    for (int i = 0; i < n / 2; ++i)
    {
 
        // replacing a non 'a' char with 'a'
        if (sb.charAt(i) != 'a')
        {
            sb.setCharAt(i, 'a');
 
            return sb.toString();
        }
    }
 
    // Check if there is no 'a' in string
    // we replace last char of string by 'b'
    sb.setCharAt(n - 1, 'b');
 
    // If the input is a single character
    return n < 2 ? " -1 " : sb.toString();
}
 
// Driver code
public static void main(String[] args)
{
    String str = "a";
    System.out.println(findStr(str));
 
    String str1 = "abccba";
    System.out.println(findStr(str1));
}
}
 
// This code is contributed by offbeat

Python3

# Python3 program to make the string
# lexicographically smallest non
# palindromic string by replacing
# exactly one character
 
# Function to find the required string
def findStr(S):
     
    S = list(S)
     
    # Length of the string
    n = len(S)
     
    # Iterate till half of the string
    for i in range(0, n // 2):
         
        # Replacing a non 'a' char with 'a'
        if S[i] != 'a':
            S[i] = 'a'
            return (''.join(S))
     
    # Check if there is no 'a' in string
    # we replace last char of string by 'b'
    S[n - 1] = 'b'
     
    # If the input is a single character
    if n < 2:
        return '-1'
    else:
        return (''.join(S))
     
# Driver Code
if __name__=='__main__':
     
    str1 = 'a'
    print(findStr(str1))
     
    str2 = 'abccba'
    print(findStr(str2))
 
# This code is contributed by rutvik_56

C#

// C# program to make the string
// lexicographically smallest non
// palindromic string by replacing
// exactly one character
using System;
 
class GFG{
 
// Function to find the required string
static String findStr(char []S)
{
 
    // Length of the string
    int n = S.Length;
 
    // Iterate till half of the string
    for(int i = 0; i < n / 2; ++i)
    {
        
       // Replacing a non 'a' char with 'a'
       if (S[i] != 'a')
       {
           S[i] = 'a';
           return new String(S);
       }
    }
 
    // Check if there is no 'a' in string
    // we replace last char of string by 'b'
    S[n - 1] = 'b';
 
    // If the input is a single character
    return n < 2 ? " -1 " : new String(S);
}
 
// Driver code
public static void Main(String[] args)
{
    String str = "a";
    Console.WriteLine(findStr(str.ToCharArray()));
 
    String str1 = "abccba";
    Console.WriteLine(findStr(str1.ToCharArray()));
}
}
 
// This code is contributed by 29AjayKumar

Javascript

<script>
 
// Javascript program to make the string
// lexicographically smallest non
// palindromic string by replacing
// exactly one character
 
// Function to find the required string
function findStr(S)
{
    // length of the string
    var n = S.length;
 
    // Iterate till half of the string
    for (var i = 0; i < n / 2; ++i) {
 
        // replacing a non 'a' char with 'a'
        if (S[i] != 'a') {
            S[i] = 'a';
 
            return S.join("");;
        }
    }
 
    // Check if there is no 'a' in string
    // we replace last char of string by 'b'
    S[n - 1] = 'b';
 
    // If the input is a single character
    return n < 2 ? " -1 " : S.join("");;
}
 
// Driver code
 
var str = "a";
document.write( findStr(Array.from(str)) + "<br>");
var str1 = "abccba";
document.write( findStr(Array.from(str1)));
 
</script>
Producción: 

-1 
aaccba

 

Complejidad de tiempo: O(N)
 

Publicación traducida automáticamente

Artículo escrito por spp____ y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *