Given a string str, the task is to check if that string is a Bitonic String or not. If string str is Bitonic String then print "YES" else print "NO".
A Bitonic String is a string in which the characters are arranged in increasing order followed by decreasing order of their ASCII values.
Examples:
Input: str = "abcdfgcba"
Output: YES
Explanation:
In the above string, the ASCII values first increases {a, b, c, d, f, g} and then decreases {g, c, b, a}.
Input: str = "abcdwef"
Output: NO
Approach:
To solve the problem, we simply need to traverse the string and check if the ASCII values of the characters of the string follow any of the following patterns:
- Strictly increasing.
- Strictly decreasing.
- Strictly increasing followed by strictly decreasing.
Follow these steps below to solve the problem:
- Start traversing the string and keep checking if the ASCII value of the next character is greater than the ASCII value of the current character or not.
- If at any point, the ASCII value of the next character is not greater than the ASCII value of the current character, break the loop.
- Again start traversing from the above break index and check if the ASCII value of the next character is smaller than the ASCII value of the current character or not.
- If at any point the ASCII value of the next character is not smaller than the ASCII value of the current character before the end of the array is reached, then print "NO" and break the loop.
- If the end of the array is reached successfully, print "YES".
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 the given
// string is bitonic
int checkBitonic(string s)
{
int i, j;
// Check for increasing sequence
for (i = 1; i < s.size(); i++) {
if (s[i] > s[i - 1])
continue;
if (s[i] <= s[i - 1])
break;
}
// If end of string has been reached
if (i == s.size() - 1)
return 1;
// Check for decreasing sequence
for (j = i + 1; j < s.size();
j++) {
if (s[j] < s[j - 1])
continue;
if (s[j] >= s[j - 1])
break;
}
i = j;
// If the end of string hasn't
// been reached
if (i != s.size())
return 0;
// Return true if bitonic
return 1;
}
// Driver Code
int main()
{
// Given string
string s = "abcdfgcba";
// Function Call
(checkBitonic(s) == 1)
? cout << "YES"
: cout << "NO";
return 0;
}
Java
// Java program for the above approach
import java.util.*;
class GFG{
// Function to check if the given
// String is bitonic
static int checkBitonic(char []s)
{
int i, j;
// Check for increasing sequence
for(i = 1; i < s.length; i++)
{
if (s[i] > s[i - 1])
continue;
if (s[i] <= s[i - 1])
break;
}
// If end of String has been reached
if (i == s.length - 1)
return 1;
// Check for decreasing sequence
for(j = i + 1; j < s.length; j++)
{
if (s[j] < s[j - 1])
continue;
if (s[j] >= s[j - 1])
break;
}
i = j;
// If the end of String hasn't
// been reached
if (i != s.length)
return 0;
// Return true if bitonic
return 1;
}
// Driver Code
public static void main(String[] args)
{
// Given String
String s = "abcdfgcba";
// Function Call
System.out.print((checkBitonic(
s.toCharArray()) == 1) ? "YES" : "NO");
}
}
// This code is contributed by PrinciRaj1992
Python3
# Python3 program for the above approach
# Function to check if the given
# string is bitonic
def checkBitonic(s):
i = 0
j = 0
# Check for increasing sequence
for i in range(1, len(s)):
if (s[i] > s[i - 1]):
continue;
if (s[i] <= s[i - 1]):
break;
# If end of string has been reached
if (i == (len(s) - 1)):
return True;
# Check for decreasing sequence
for j in range(i + 1, len(s)):
if (s[j] < s[j - 1]):
continue;
if (s[j] >= s[j - 1]):
break;
i = j;
# If the end of string hasn't
# been reached
if (i != len(s) - 1):
return False;
# Return true if bitonic
return True;
# Driver code
# Given string
s = "abcdfgcba"
# Function Call
if(checkBitonic(s)):
print("YES")
else:
print("NO")
# This code is contributed by grand_master
C#
// C# program for the above approach
using System;
class GFG{
// Function to check if the given
// String is bitonic
static int checkBitonic(char []s)
{
int i, j;
// Check for increasing sequence
for(i = 1; i < s.Length; i++)
{
if (s[i] > s[i - 1])
continue;
if (s[i] <= s[i - 1])
break;
}
// If end of String has been reached
if (i == s.Length - 1)
return 1;
// Check for decreasing sequence
for(j = i + 1; j < s.Length; j++)
{
if (s[j] < s[j - 1])
continue;
if (s[j] >= s[j - 1])
break;
}
i = j;
// If the end of String hasn't
// been reached
if (i != s.Length)
return 0;
// Return true if bitonic
return 1;
}
// Driver Code
public static void Main(String[] args)
{
// Given String
String s = "abcdfgcba";
// Function call
Console.Write((checkBitonic(
s.ToCharArray()) == 1) ? "YES" : "NO");
}
}
// This code is contributed by PrinciRaj1992
JavaScript
<script>
// Javascript program for the above approach
// Function to check if the given
// string is bitonic
function checkBitonic(s)
{
var i, j;
// Check for increasing sequence
for (i = 1; i < s.length; i++) {
if (s[i] > s[i - 1])
continue;
if (s[i] <= s[i - 1])
break;
}
// If end of string has been reached
if (i == s.length - 1)
return 1;
// Check for decreasing sequence
for (j = i + 1; j < s.length;
j++) {
if (s[j] < s[j - 1])
continue;
if (s[j] >= s[j - 1])
break;
}
i = j;
// If the end of string hasn't
// been reached
if (i != s.length)
return 0;
// Return true if bitonic
return 1;
}
// Driver Code
// Given string
var s = "abcdfgcba";
// Function Call
(checkBitonic(s) == 1)
? document.write( "YES")
: document.write( "NO");
// This code is contributed by itsok.
</script>
Time Complexity: O(N)
Auxiliary Space: O(1)
Similar Reads
What is Binary String? A binary string is a string that only has two characters, usually the numbers 0 and 1, and it represents a series of binary digits. Binary String Variables:In computer programming, binary string variables are used to store binary data, which is data that is represented in a binary (base-2) format, r
9 min read
Add two bit strings Given two binary strings s1 and s2 consisting of only 0s and 1s. Find the resultant string after adding the two Binary Strings.Note: The input strings may contain leading zeros but the output string should not have any leading zeros.Examples:Input: s1 = "1101", s2 = "111"Output: 10100Explanation: "1
1 min read
CHAR_BIT in C CHAR_BIT : It is the number of bits in char. These days, almost all architectures use 8 bits per byte (But it is not the case always, some older machines used to have 7-bit byte). It can be found in Let us see an application of it. Suppose we wish to print byte by byte representation of an integer.
1 min read
Check for Binary String Given a string s, the task is to check if it is a binary string or not. A binary string is a string which only contains the characters '0' and '1'.Examples:Input: s = "01010101010"Output: trueInput: s = "geeks101"Output: false Approach:The idea is to iterate over all the characters of the string and
3 min read
Add two binary strings Given two binary strings s1 and s2, the task is to return their sum.The input strings may contain leading zeros but the output string should not have any leading zeros.Example: Input: s1 = "1101", s2 = "111" Output: "10100" Explanation:Input: s1 = "00100", s2 = "010" Output: "110" Bit-by-bit additio
8 min read