Print string of odd length in ‘X’ format
Given a string of odd length, print the string X format.
Examples :
Input: 12345
Output:
1 5
2 4
3
2 4
1 5
Input: geeksforgeeks
Output:
g s
e k
e e
k e
s g
f r
o
f r
s g
k e
e e
e k
g s
We strongly recommend you to minimize your browser and try this yourself first.
The idea is to use two variables in a single loop, the first variable ‘i’ goes from left to right and second variable ‘j’ goes from right to left. The upper part of Cross (or X) is printed before they meet. The central character is printed when they meet and lower part is printed after they cross each other. In the upper part str[i] is printed before str[j] and in the lower part, str[j] is printed before str[i].
Below is the implementation of above idea.
C++
#include <iostream>
using namespace std;
void printPattern(string str)
{
int len = str.length();
for ( int i = 0, j = len - 1; i <= len, j >= 0;
i++, j--) {
if (i < j) {
for ( int x = 0; x < i; x++)
cout << " " ;
cout << str[i];
for ( int x = 0; x < j - i - 1; x++)
cout << " " ;
cout << str[j] << endl;
}
if (i == j) {
for ( int x = 0; x < i; x++)
cout << " " ;
cout << str[i] << endl;
}
else if (i > j) {
for ( int x = j - 1; x >= 0; x--)
cout << " " ;
cout << str[j];
for ( int x = 0; x < i - j - 1; x++)
cout << " " ;
cout << str[i] << endl;
}
}
}
int main()
{
printPattern( "geeksforgeeks" );
return 0;
}
|
Java
class GFG {
static void pattern(String str, int len)
{
for ( int i = 0 ; i < len; i++) {
int j = len - 1 - i;
for ( int k = 0 ; k < len; k++) {
if (k == i || k == j)
System.out.print(str.charAt(k));
else
System.out.print( " " );
}
System.out.println( "" );
}
}
public static void main(String[] args)
{
String str = "geeksforgeeks" ;
int len = str.length();
pattern(str, len);
}
}
|
Python3
def pattern( str , len ):
for i in range ( 0 , len ):
j = len - 1 - i
for k in range ( 0 , len ):
if (k = = i or k = = j):
print ( str [k],
end = "")
else :
print (end = " " )
print ( " " )
str = "geeksforgeeks"
len = len ( str )
pattern( str , len )
|
C#
using System;
class GFG {
static void pattern(String str, int len)
{
for ( int i = 0; i < len; i++) {
int j = len - 1 - i;
for ( int k = 0; k < len; k++) {
if (k == i || k == j)
Console.Write(str[k]);
else
Console.Write( " " );
}
Console.Write( "\n" );
}
}
public static void Main()
{
String str = "geeksforgeeks" ;
int len = str.Length;
pattern(str, len);
}
}
|
PHP
<?php
function printPattern( $str )
{
$len = strlen ( $str );
for ( $i = 0, $j = $len - 1;
$i <= $len , $j >= 0;
$i ++, $j --)
{
if ( $i < $j )
{
for ( $x = 0; $x < $i ; $x ++)
echo " " ;
echo $str [ $i ];
for ( $x = 0; $x < $j - $i - 1;
$x ++)
echo " " ;
echo $str [ $j ]. "\n" ;
}
if ( $i == $j )
{
for ( $x = 0; $x < $i ; $x ++)
echo " " ;
echo $str [ $i ]. "\n" ;
}
else if ( $i > $j )
{
for ( $x = $j - 1; $x >= 0;
$x --)
echo " " ;
echo $str [ $j ];
for ( $x = 0; $x < $i - $j - 1;
$x ++)
echo " " ;
echo $str [ $i ]. "\n" ;
}
}
}
printPattern( "geeksforgeeks" );
?>
|
Javascript
<script>
function pattern(str,len)
{
for (i = 0; i < len; i++)
{
var j = len - 1 - i;
for (k = 0; k < len; k++)
{
if (k == i || k == j)
document.write(str.charAt(k));
else
document.write( " " );
}
document.write( "<br>" );
}
}
str = "geeksforgeeks" ;
var len = str.length;
pattern(str, len);
</script>
|
Output
g s
e k
e e
k e
s g
f r
o
f r
s g
k e
e e
e k
g s
Time Complexity: O(len*len), where len is the length of the string.
Auxiliary Space: O(1).
Alternative Solution :
C++
#include <bits/stdc++.h>
using namespace std;
void pattern(string str, int len)
{
for ( int i = 0; i < len; i++) {
int j = len - 1 - i;
for ( int k = 0; k < len; k++) {
if (k == i || k == j)
cout << str[k];
else
cout << " " ;
}
cout << endl;
}
}
int main()
{
string str = "geeksforgeeks" ;
int len = str.size();
pattern(str, len);
return 0;
}
|
Java
class GFG {
static void pattern(String str, int len)
{
for ( int i = 0 ; i < len; i++) {
int j = len - 1 - i;
for ( int k = 0 ; k < len; k++) {
if (k == i || k == j)
System.out.print(str.charAt(k));
else
System.out.print( " " );
}
System.out.println( "" );
}
}
public static void main(String[] args)
{
String str = "geeksforgeeks" ;
int len = str.length();
pattern(str, len);
}
}
|
Python3
def pattern(st, length):
for i in range (length):
j = length - 1 - i
for k in range (length):
if (k = = i or k = = j):
print (st[k], end = "")
else :
print ( " " , end = "")
print ()
if __name__ = = "__main__" :
st = "geeksforgeeks"
length = len (st)
pattern(st, length)
|
C#
using System;
class GFG {
static void pattern(String str, int len)
{
for ( int i = 0; i < len; i++) {
int j = len - 1 - i;
for ( int k = 0; k < len; k++) {
if (k == i || k == j)
Console.Write(str[k]);
else
Console.Write( " " );
}
Console.WriteLine( "" );
}
}
public static void Main(String[] args)
{
String str = "geeksforgeeks" ;
int len = str.Length;
pattern(str, len);
}
}
|
PHP
<?php
function pattern( $str , $len )
{
for ( $i = 0; $i < $len ; $i ++)
{
$j = $len -1 - $i ;
for ( $k = 0; $k < $len ; $k ++)
{
if ( $k == $i || $k == $j )
echo $str [ $k ];
else
echo " " ;
}
echo "\n" ;
}
}
$str = "geeksforgeeks" ;
$len = strlen ( $str );
pattern( $str , $len );
?>
|
Javascript
<script>
function pattern(str , len)
{
for ( var i = 0; i < len; i++)
{
var j = len -1 - i;
for ( var k = 0; k < len; k++)
{
if (k == i || k == j)
document.write(str.charAt(k));
else
document.write( " " );
}
document.write( '<br>' );
}
}
var str = "geeksforgeeks" ;
var len = str.length;
pattern(str, len);
</script>
|
Output
g s
e k
e e
k e
s g
f r
o
f r
s g
k e
e e
e k
g s
Time Complexity: O(len*len), where len is the length of the string.
Auxiliary Space: O(1).
Solution 3: This problem can also be solved by observing that the characters are printed along the left and right diagonals only if we enclose the pattern within a matrix. Now, if the length of the string is len then the pattern can be enclosed within a square matrix of order len.
- The elements along the left diagonal can be accessed by the condition ( i==j ) where i and j are the row and column numbers respectively.
- The elements along the right diagonal can be accessed by the condition (i+j == len-1).
So, run a nested loop of order len and fill the positions satisfying at the above two conditions with respective characters and the rest of the positions with blank spaces.
Below is the implementation of the above approach:
CPP
#include <bits/stdc++.h>
using namespace std;
void printPattern(string str, int len)
{
for ( int i = 0; i < len; i++) {
for ( int j = 0; j < len; j++) {
if ((i == j) || (i + j == len - 1))
cout << str[j];
else
cout << " " ;
}
cout << endl;
}
}
int main()
{
string str = "geeksforgeeks" ;
int len = str.size();
printPattern(str, len);
return 0;
}
|
Java
import java.io.*;
class GFG {
static void printPattern(String str, int len)
{
for ( int i = 0 ; i < len; i++) {
for ( int j = 0 ; j < len; j++) {
if ((i == j) || (i + j == len - 1 ))
System.out.print(str.charAt(j));
else
System.out.print( " " );
}
System.out.println();
}
}
public static void main(String[] args)
{
String str = "geeksforgeeks" ;
int len = str.length();
printPattern(str, len);
}
}
|
Python3
def printPattern( Str , Len ):
for i in range ( Len ):
for j in range ( Len ):
if ((i = = j) or (i + j = = Len - 1 )):
print ( Str [j], end = "")
else :
print ( " " , end = "")
print ()
Str = "geeksforgeeks"
Len = len ( Str )
printPattern( Str , Len )
|
C#
using System;
public class GFG {
static void printPattern( string str, int len)
{
for ( int i = 0; i < len; i++) {
for ( int j = 0; j < len; j++) {
if ((i == j) || (i + j == len - 1))
Console.Write(str[j]);
else
Console.Write( " " );
}
Console.WriteLine();
}
}
static public void Main()
{
String str = "geeksforgeeks" ;
int len = str.Length;
printPattern(str, len);
}
}
|
Javascript
<script>
function printPattern(str , len)
{
for ( var i = 0; i < len; i++)
{
for ( var j = 0; j < len; j++)
{
if ((i == j) || (i + j == len - 1))
document.write(str.charAt(j));
else
document.write( " " );
}
document.write( '<br>' );
}
}
var str = "geeksforgeeks" ;
var len = str.length;
printPattern(str, len);
</script>
|
Output
g s
e k
e e
k e
s g
f r
o
f r
s g
k e
e e
e k
g s
Time Complexity: O(len*len), where len is the length of the string.
Auxiliary Space: O(1).
This article is contributed by Dinesh T.P.D.
Last Updated :
11 Sep, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...