Compruebe si la string dada cumple las siguientes condiciones

Dada una string S de longitud L , donde L es un cuadrado perfecto , la tarea es comprobar si la string dada cumple las siguientes condiciones:

  • Inserte los caracteres de la string en una array cuadrada A[][] de dimensiones √L x √L en filas.
  • Inicialice otra array M[][] con 0 s. Rellena la diagonal izquierda con 1 . Ahora, para 1 presente en la diagonal izquierda, llena su correspondiente diagonal derecha con 1 s.

  • Ahora, verifique si todos los índices en la array M[][] que contiene 1 , contienen el mismo carácter en A[][] .

Si se cumple la condición, escriba “Sí”. De lo contrario, escriba “No” .

Ejemplos: 

Entrada: S = ”abacdaeaafaghaia”
Salida:
Explicación: 
 

 Entrada: S = ”abacdaeabfaghaia” 
Salida: No 

Enfoque: La idea es atravesar la array A[][] donde su carácter correspondiente en la array M[][] es 1 . Siga los pasos a continuación para resolver el problema: 

  • Calcula las dimensiones de la array como N = √L .
  • Iterar sobre la diagonal izquierda visitando cada celda, A[i][i] donde 1<= i<= N .
  • Para cada elemento de la diagonal izquierda en la celda A[i][i] , inicialice las variables x e y con i y recorra su diagonal derecha correspondiente visitando el carácter S[x*N + y] y S[y*N + x ] y disminuya x cada vez en 1 e incremente y cada vez en 1 para moverse a lo largo de las siguientes celdas en las diagonales derechas, mientras que x no es menor que 0 e y es menor que N .
  • Si se encuentra que todos los caracteres son iguales en el paso anterior, imprima «Sí» . De lo contrario, imprima «No» si se encuentra alguna discrepancia.

A continuación se muestra la implementación del enfoque anterior: 

C++

// C++ program for the above approach
 
#include <bits/stdc++.h>
using namespace std;
 
// Function to check if given string
// satisfies the given conditions
void isValid(string s)
{
 
    // Dimensions
    int n = sqrt(s.length());
 
    char check = s[0];
 
    // Left diagonal
    for (int i = 0; i < n; i++) {
        int x = i, y = i;
 
        // Right diagonal
        while (x >= 0 && y < n) {
            if (s[(n * x) + y] != check
                || s[(n * y) + x] != check) {
 
                // Conditions not satisfied
                cout << "No" << endl;
                return;
            }
            x--;
            y++;
        }
    }
 
    // Print Yes
    cout << "Yes" << endl;
}
 
// Driver Code
int main()
{
 
    // Given String
    string str = "abacdaeaafaghaia";
 
    // Function call
    isValid(str);
 
    return 0;
}

Java

// Java program for the above approach
import java.util.*;
   
class GFG{
   
// Function to check if given string
// satisfies the given conditions
static void isValid(String s)
{
     
    // Dimensions
    int n = (int)Math.sqrt(s.length());
      
    char check = s.charAt(0);
      
    // Left diagonal
    for(int i = 0; i < n; i++)
    {
        int x = i, y = i;
         
        // Right diagonal
        while (x >= 0 && y < n)
        {
            if (s.charAt((n * x) + y) != check ||
                s.charAt((n * y) + x) != check)
            {
                 
                // Conditions not satisfied
                System.out.print("No");
                return;
            }
            x--;
            y++;
        }
    }
     
    // Print Yes
    System.out.print("Yes");
}
   
// Driver Code
public static void main(String[] args)
{
     
    // Given String
    String str = "abacdaeaafaghaia";
     
    // Function call
    isValid(str);
}
}
 
// This code is contributed by code_hunt

Python3

# Python3 program for the above approach
import math
 
# Function to check if given string
# satisfies the given conditions
def isValid(s):
     
    # Dimensions
    n = int(math.sqrt(len(s)))
    check = s[0]
 
    # Left diagonal
    for i in range(n):
        x = i
        y = i
         
        # Right diagonal
        while (x >= 0 and y < n):
            if (s[n * x + y] != check or
                s[n * x + x] != check):
                     
                # Conditions not satisfied
                print("No")
                return
                 
            x -= 1
            y += 1
             
    # Print Yes
    print("Yes")
     
# Driver Code
 
# Given String
str = "abacdaeaafaghaia"
 
# Function call
isValid(str)
 
# This code is contributed by avanitrachhadiya2155

C#

// C# program for the above approach 
using System;
  
class GFG{
  
// Function to check if given string
// satisfies the given conditions
static void isValid(string s)
{
     
    // Dimensions
    int n = (int)Math.Sqrt(s.Length);
     
    char check = s[0];
     
    // Left diagonal
    for(int i = 0; i < n; i++)
    {
        int x = i, y = i;
         
        // Right diagonal
        while (x >= 0 && y < n)
        {
            if (s[(n * x) + y] != check ||
                s[(n * y) + x] != check)
            {
                 
                // Conditions not satisfied
                Console.Write("No");
                return;
            }
            x--;
            y++;
        }
    }
  
    // Print Yes
    Console.Write("Yes");
}
 
// Driver code
public static void Main()
{
     
    // Given String
    string str = "abacdaeaafaghaia";
  
    // Function call
    isValid(str);
}
}
 
// This code is contributed by sanjoy_62

Javascript

<script>
 
// Javascript program to implement
// the above approach
 
// Function to check if given string
// satisfies the given conditions
function isValid(s)
{
      
    // Dimensions
    let n = Math.sqrt(s.length);
       
    let check = s[0];
       
    // Left diagonal
    for(let i = 0; i < n; i++)
    {
        let x = i, y = i;
          
        // Right diagonal
        while (x >= 0 && y < n)
        {
            if (s[(n * x) + y]!= check ||
                s[(n * y) + x] != check)
            {
                  
                // Conditions not satisfied
                document.write("No");
                return;
            }
            x--;
            y++;
        }
    }
      
    // Print Yes
    document.write("Yes");
}
   
    // Driver Code
     
    // Given String
    let str = "abacdaeaafaghaia";
      
    // Function call
    isValid(str);
 
// This code is contributed by souravghosh0416.
</script>
Producción: 

Yes

 

Complejidad de tiempo: O(L) donde L es la longitud de la string dada.
Espacio Auxiliar: O(L)

Publicación traducida automáticamente

Artículo escrito por rutvik_56 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 *