📜  双音字符串

📅  最后修改于: 2021-05-04 17:06:01             🧑  作者: Mango

给定字符串str ,任务是检查该字符串是否是Bitonic字符串。如果字符串str是Bitonic String,则输出“ YES”,否则输出“ NO”

例子:

方法:
为了解决这个问题,我们只需要遍历字符串并检查字符串的字符的ASCII值以下任何模式:

  • 严格增加。
  • 严格减少。
  • 严格增加,然后严格减少。

请按照以下步骤解决问题:

  1. 开始遍历字符串,并继续检查下一个字符的ASCII值是否大于当前字符的ASCII值。
  2. 如果在任何时候下一个字符的ASCII值不大于当前字符的ASCII值,请中断循环。
  3. 再次从上述中断索引开始遍历,并检查下一个字符的ASCII值是否小于当前字符的ASCII值。
  4. 如果在到达数组末尾之前,下一个字符的ASCII值在任何时候都不小于当前字符的ASCII值,则打印“ NO”并中断循环。
  5. 如果成功到达数组末尾,请打印“ 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)