给定字符串str ,任务是检查该字符串是否是Bitonic字符串。如果字符串str是Bitonic String,则输出“ YES”,否则输出“ NO” 。
A Bitonic String is a string in which the characters are arranged in increasing order followed by decreasing order of their ASCII values.
例子:
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
方法:
为了解决这个问题,我们只需要遍历字符串并检查字符串的字符的ASCII值以下任何模式:
- 严格增加。
- 严格减少。
- 严格增加,然后严格减少。
请按照以下步骤解决问题:
- 开始遍历字符串,并继续检查下一个字符的ASCII值是否大于当前字符的ASCII值。
- 如果在任何时候下一个字符的ASCII值不大于当前字符的ASCII值,请中断循环。
- 再次从上述中断索引开始遍历,并检查下一个字符的ASCII值是否小于当前字符的ASCII值。
- 如果在到达数组末尾之前,下一个字符的ASCII值在任何时候都不小于当前字符的ASCII值,则打印“ NO”并中断循环。
- 如果成功到达数组末尾,请打印“ YES” 。
下面是上述方法的实现:
C++
// C++ program for the above approach
#include
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
输出:
YES
时间复杂度: O(N)
辅助空间: O(1)