Skip to content
Related Articles

Related Articles

Improve Article

Check if given string satisfies the following conditions

  • Last Updated : 23 Apr, 2021
Geek Week

Given a string S of length L, where L is a perfect square, the task is to check if the given string satisfies the following conditions:

  • Insert the characters of the string into a square matrix A[][] of dimensions √L x √L in row-wise manner.
  • Initialize another matrix M[][] with 0s. Fill the left diagonal with 1. Now, for 1 present in the left diagonal, fill its corresponding right diagonal with 1s.

  • Now, check if all the indices in matrix M[][] which contains 1, contains the same character in A[][].

If the condition is satisfied, print “Yes”. Otherwise, print “No”.

Examples: 

Input: S = ”abacdaeaafaghaia”
Output: Yes
Explanation: 
 



 Input: S = ”abacdaeabfaghaia” 
Output: No 

Approach: The idea is to traverse the matrix A[][] where its corresponding character in the matrix M[][] is 1. Follow the steps below to solve the problem: 

  • Calculate the dimensions of the matrix as N = √L.
  • Iterate over the left diagonal by visiting each cell, A[i][i] where 1<= i<= N.
  • For every element of the left diagonal at cell A[i][i], initialize variables x and y with i and traverse its corresponding right diagonal by visiting the character S[x*N + y] and S[y*N + x] and decrement x each time by 1 and increment y each time by 1 to move along the next cells in the right diagonals, while x is not smaller than 0 and y is smaller than N.
  • If all characters are found to be same in the above step, print “Yes”. Otherwise, print “No” if any mismatch is found.

Below is the implementation of the above approach: 

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++;
        }
    }
      
    // Prlet Yes
    document.write("Yes");
}
   
    // Driver Code
     
    // Given String
    let str = "abacdaeaafaghaia";
      
    // Function call
    isValid(str);
 
// This code is contributed by souravghosh0416.
</script>
Output: 
Yes

 

Time Complexity: O(L) where L is the length of the given string.
Auxiliary Space: O(L)

 

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the DSA Self Paced Course at a student-friendly price and become industry ready.  To complete your preparation from learning a language to DS Algo and many more,  please refer Complete Interview Preparation Course.

In case you wish to attend live classes with experts, please refer DSA Live Classes for Working Professionals and Competitive Programming Live for Students.




My Personal Notes arrow_drop_up
Recommended Articles
Page :