Queries for characters in a repeated string
Last Updated :
06 Jul, 2022
Given a string, X. Form a string S by repeating string X multiple times i.e appending string X multiple times with itself. There are Q queries of forms i and j. The task is to print “Yes” if the element at index i is the same as the element at index j in S else print “No” for each query.
Examples :
Input : X = "geeksforgeeks", Q = 3.
Query 1: 0 8
Query 2: 8 13
Query 3: 6 15
Output :
Yes
Yes
No
String S will be "geeksforgeeksgeeksforgeeks....".
For Query 1, index 0 and index 8 have same element i.e 'g'.
For Query 2, index 8 and index 13 have same element i.e 'g'.
For Query 3, index 6 = 'o' and index 15 = 'e' which are not same.
Let the length of string X be n. Observe that elements at indexes 0, n, 2n, 3n,…. are the same. Similarly for index i, position i, n+i, 2n+i, 3n+i,….. contain same element.
So, for each query, find (i%n) and (j%n), and if both are the same for string X.
Below is the implementation of the above idea:
C++
#include <bits/stdc++.h>
using namespace std;
void query( char s[], int i, int j)
{
int n = strlen (s);
i %= n;
j %= n;
(s[i] == s[j]) ? (cout << "Yes" << endl)
: (cout << "No" << endl);
}
int main()
{
char X[] = "geeksforgeeks" ;
query(X, 0, 8);
query(X, 8, 13);
query(X, 6, 15);
return 0;
}
|
Java
import java.io.*;
public class GFG{
static void query(String s, int i,
int j)
{
int n = s.length();
i %= n;
j %= n;
if (s.charAt(i) == s.charAt(j))
System.out.println( "Yes" );
else
System.out.println( "No" );
}
static public void main (String[] args)
{
String X = "geeksforgeeks" ;
query(X, 0 , 8 );
query(X, 8 , 13 );
query(X, 6 , 15 );
}
}
|
Python3
def query(s, i, j):
n = len (s)
i % = n
j % = n
print ( "Yes" ) if s[i] = = s[j] else print ( "No" )
if __name__ = = "__main__" :
X = "geeksforgeeks"
query(X, 0 , 8 )
query(X, 8 , 13 )
query(X, 6 , 15 )
|
C#
using System;
public class GFG{
static void query( string s, int i,
int j)
{
int n = s.Length;
i %= n;
j %= n;
if (s[i] == s[j])
Console.WriteLine( "Yes" );
else
Console.WriteLine( "No" );
}
static public void Main ()
{
string X = "geeksforgeeks" ;
query(X, 0, 8);
query(X, 8, 13);
query(X, 6, 15);
}
}
|
PHP
<?php
function query( $s , $i , $j )
{
$n = strlen ( $s );
$i %= $n ;
$j %= $n ;
if (( $s [ $i ] == $s [ $j ]))
echo "Yes\n" ;
else
echo "No" ;
}
$X = "geeksforgeeks" ;
query( $X , 0, 8);
query( $X , 8, 13);
query( $X , 6, 15);
?>
|
Javascript
<script>
function query(s, i, j)
{
let n = s.length;
i %= n;
j %= n;
if (s[i] == s[j])
document.write( "Yes" + "</br>" );
else
document.write( "No" + "</br>" );
}
let X = "geeksforgeeks" ;
query(X, 0, 8);
query(X, 8, 13);
query(X, 6, 15);
</script>
|
Time complexity: O(1)
Auxiliary Space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...