📌  相关文章
📜  检查给定的字符串是否是通过将z重复连接到a形成的字符串的子字符串

📅  最后修改于: 2021-05-07 09:22:15             🧑  作者: Mango

给定字符串str ,任务是检查字符串str是否是无限长字符串S的子字符串,在该字符串中小写字母的反向顺序为:

例子:

方法:它可以观察到每一个字符比前一个字符时,后面跟着“Z”“一”,除了较低的ASCII值。解决此问题的最佳方法是简单地检查每个字符,如果其后的字符具有较低的ASCII值。当前字符为“ a”时,忽略此比较。如果出现了当前字符“ a”,请检查其后是否跟有字符“ z”。

步骤如下:

  1. 创建一个标志变量来标记给定的字符串是否是有效的子字符串。最初将其设置为true。
  2. 遍历给定的字符串str ,对于每个字符, str [i]执行以下操作:
    • 如果str [i + 1] + 1
    • 如果str [i] =’a’和str [i + 1] =’z’,则再次继续循环。
    • 否则将标志变量标记为false并从循环中中断。
  3. 最后,如果标志为true,则打印YES,否则打印NO

下面是上述方法的实现:

C++
// C++ program for the above approach
#include  
using namespace std;
  
// Function checks if a given string is
// valid or not and prints the output
void checkInfinite(string s)
{
    // Boolean flag variable to mark
    // if given string is valid
    bool flag = 1;
  
    int N = s.length();
  
    // Traverse the given string
    for (int i = 0; i < N - 1; i++) {
  
        // If adjacent character
        // differ by 1
        if (s[i] == char(int(s[i + 1]) + 1)) {
            continue;
        }
  
        // If character 'a' is
        // followed by 4
        else if (s[i] == 'a'
                 && s[i + 1] == 'z') {
            continue;
        }
  
        // Else flip the flag and
        // break from the loop
        else {
            flag = 0;
            break;
        }
    }
  
    // Output according to flag variable
    if (flag == 0)
        cout << "NO";
    else
        cout << "YES";
}
  
// Driver Code
int main()
{
    // Given string
    string s = "ecbaz";
  
    // Function Call
    checkInfinite(s);
  
    return 0;
}


Java
// Java program for the above approach
class GFG{
  
// Function checks if a given string is 
// valid or not and prints the output 
public static void checkInfinite(String s) 
{ 
      
    // Boolean flag variable to mark 
    // if given string is valid 
    boolean flag = true; 
  
    int N = s.length(); 
  
    // Traverse the given string 
    for(int i = 0; i < N - 1; i++)
    { 
          
        // If adjacent character 
        // differ by 1 
        if (s.charAt(i) == (char)((int)
           (s.charAt(i + 1)) + 1)) 
        { 
            continue; 
        } 
  
        // If character 'a' is 
        // followed by 4 
        else if (s.charAt(i) == 'a' && 
                 s.charAt(i + 1) == 'z') 
        { 
            continue; 
        } 
  
        // Else flip the flag and 
        // break from the loop 
        else
        { 
            flag = false; 
            break; 
        } 
    } 
  
    // Output according to flag variable 
    if (!flag)
        System.out.print("NO");
    else
        System.out.print("YES");
} 
  
// Driver code
public static void main(String[] args)
{
      
    // Given string 
    String s = "ecbaz"; 
  
    // Function call 
    checkInfinite(s);
}
}
  
// This code is contributed by divyeshrabadiya07


Python3
# Python3 program for the above approach
  
# Function checks if a given is
# valid or not and prints the output
def checkInfinite(s):
  
    # Boolean flag variable to mark
    # if given is valid
    flag = 1
  
    N = len(s)
  
    # Traverse the given string
    for i in range(N - 1):
  
        # If adjacent character
        # differ by 1
        if (s[i] == chr(ord(s[i + 1]) + 1)):
            continue
  
        # If character 'a' is
        # followed by 4
        elif (s[i] == 'a' and s[i + 1] == 'z'):
            continue
  
        # Else flip the flag and
        # break from the loop
        else:
            flag = 0
            break
  
    # Output according to flag variable
    if (flag == 0):
        print("NO")
    else:
        print("YES")
  
# Driver Code
if __name__ == '__main__':
  
    # Given string
    s = "ecbaz"
  
    # Function Call
    checkInfinite(s)
  
# This code is contributed by mohit kumar 29


C#
// C# program for the above approach
using System;
  
class GFG{
  
// Function checks if a given string is 
// valid or not and prints the output 
public static void checkInfinite(String s) 
{ 
      
    // Boolean flag variable to mark 
    // if given string is valid 
    bool flag = true; 
  
    int N = s.Length; 
  
    // Traverse the given string 
    for(int i = 0; i < N - 1; i++)
    { 
          
        // If adjacent character 
        // differ by 1 
        if (s[i] == (char)((int)
           (s[i + 1]) + 1)) 
        { 
            continue; 
        } 
  
        // If character 'a' is 
        // followed by 4 
        else if (s[i] == 'a' && 
                 s[i + 1] == 'z') 
        { 
            continue; 
        } 
  
        // Else flip the flag and 
        // break from the loop 
        else
        { 
            flag = false; 
            break; 
        } 
    } 
  
    // Output according to flag variable 
    if (!flag)
        Console.Write("NO");
    else
        Console.Write("YES");
} 
  
// Driver code
public static void Main(String[] args)
{
      
    // Given string 
    String s = "ecbaz"; 
  
    // Function call 
    checkInfinite(s);
}
}
  
// This code is contributed by Rajput-Ji


输出:
NO

时间复杂度: O(N)
辅助空间: O(1)