Longest substring that starts with X and ends with Y - GeeksforGeeks

07 May, 2021
Given a string str, two characters X and Y. The task is to find the length of the longest substring that starts with X and ends with Y. It is given that there always exists a substring that starts with X and ends with Y. Examples:  
Input: str = “QWERTYASDFZXCV”, X = ‘A’, Y = ‘Z’ Output: 5 Explanation: The largest substring which start with ‘A’ and end with ‘Z’ = “ASDFZ”. Size of the substring = 5.Input: str = “ZABCZ”, X = ‘Z’, Y = ‘Z’ Output: 3 Explanation: The largest substring which start with ‘Z’ and end with ‘Z’ = “ZABCZ”. Size of the substring = 5.  
Naive Approach: The naive approach is to find all the substrings of the given string out of these find the largest substring which starts with X and ends with Y. Time Complexity: O(N2) Auxiliary Space: O(1)Efficient Approach: To optimized the above approach, the count of characters between X and Y should be the largest. So, iterate over the string using pointers start and end to find the first occurrence of X from the starting index and the last occurrence of Y from the end. Below are the steps:  
Initialize start = 0 and end = length of string – 1.Traverse the string from the beginning and find the first occurrence of character X. Let it be at index xPos.Traverse the string from the beginning and find the last occurrence of character Y. Let it be at index yPos.The length of the longest substring is given by (yPos – xPos + 1).
Initialize start = 0 and end = length of string – 1.
Traverse the string from the beginning and find the first occurrence of character X. Let it be at index xPos.
Traverse the string from the beginning and find the last occurrence of character Y. Let it be at index yPos.
The length of the longest substring is given by (yPos – xPos + 1).
Below is the implementation of the above approach: 
C++
Java
Python3
C#
Javascript
// C++ program for the above approach#include <bits/stdc++.h>using namespace std; // Function returns length of longest// substring starting with X and// ending with Yint longestSubstring(string str,                    char X, char Y){    // Length of string    int N = str.length();    int start = 0;    int end = N - 1;    int xPos = 0;    int yPos = 0;     // Find the length of the string    // starting with X from the beginning    while (true) {         if (str[start] == X) {            xPos = start;            break;        }        start++;    }     // Find the length of the string    // ending with Y from the end    while (true) {         if (str[end] == Y) {            yPos = end;            break;        }        end--;    }     // Longest substring    int length = (yPos - xPos) + 1;     // Print the length    cout << length;} // Driver Codeint main(){    // Given string str    string str = "HASFJGHOGAKZZFEGA";     // Starting and Ending characters    char X = 'A', Y = 'Z';     // Function Call    longestSubstring(str, X, Y);    return 0;}
// Java program for the above approachclass GFG{     // Function returns length of longest// substring starting with X and// ending with Ypublic static void longestSubstring(String str,                                    char X, char Y){         // Length of string    int N = str.length();    int start = 0;    int end = N - 1;    int xPos = 0;    int yPos = 0;         // Find the length of the string    // starting with X from the beginning    while (true)    {        if (str.charAt(start) == X)        {            xPos = start;            break;        }        start++;    }         // Find the length of the string    // ending with Y from the end    while (true)    {        if (str.charAt(end) == Y)        {            yPos = end;            break;        }        end--;    }         // Longest substring    int length = (yPos - xPos) + 1;         // Print the length    System.out.print(length);} // Driver codepublic static void main(String[] args){         // Given string str    String str = "HASFJGHOGAKZZFEGA";         // Starting and Ending characters    char X = 'A', Y = 'Z';         // Function Call    longestSubstring(str, X, Y);}} // This code is contributed by divyeshrabadiya07
# Python3 program for the above approach # Function returns length of longest# substring starting with X and# ending with Ydef longestSubstring(str, X, Y):         # Length of string    N = len(str)         start = 0    end = N - 1    xPos = 0    yPos = 0     # Find the length of the string    # starting with X from the beginning    while (True):        if (str[start] == X):            xPos = start            break                     start += 1     # Find the length of the string    # ending with Y from the end    while (True):        if (str[end] == Y):            yPos = end            break                 end -= 1     # Longest substring    length = (yPos - xPos) + 1     # Print the length    print(length) # Driver Codeif __name__ == "__main__":         # Given string str    str = "HASFJGHOGAKZZFEGA"     # Starting and Ending characters    X = 'A'    Y = 'Z'     # Function Call    longestSubstring(str, X, Y) # This code is contributed by sanjoy_62
// C# program for the above approach using System; class GFG{     // Function returns length of longest// substring starting with X and// ending with Ystatic void longestSubstring(string str,                             char X, char Y){         // Length of string    int N = str.Length;    int start = 0;    int end = N - 1;    int xPos = 0;    int yPos = 0;         // Find the length of the string    // starting with X from the beginning    while (true)    {        if (str[start] == X)        {            xPos = start;            break;        }        start++;    }         // Find the length of the string    // ending with Y from the end    while (true)    {        if (str[end] == Y)        {            yPos = end;            break;        }        end--;    }         // Longest substring    int length = (yPos - xPos) + 1;         // Print the length    Console.Write(length);} // Driver codepublic static void Main(){         // Given string str    string str = "HASFJGHOGAKZZFEGA";         // Starting and Ending characters    char X = 'A', Y = 'Z';         // Function call    longestSubstring(str, X, Y);}} // This code is contributed by sanjoy_62
<script>      // JavaScript program for the above approach      // Function returns length of longest      // substring starting with X and      // ending with Y      function longestSubstring(str, X, Y) {        // Length of string        var N = str.length;        var start = 0;        var end = N - 1;        var xPos = 0;        var yPos = 0;         // Find the length of the string        // starting with X from the beginning        while (true) {          if (str[start] === X) {            xPos = start;            break;          }          start++;        }         // Find the length of the string        // ending with Y from the end        while (true) {          if (str[end] === Y) {            yPos = end;            break;          }          end--;        }         // Longest substring        var length = yPos - xPos + 1;         // Print the length        document.write(length);      }       // Driver code      // Given string str      var str = "HASFJGHOGAKZZFEGA";       // Starting and Ending characters      var X = "A",        Y = "Z";      // Function call      longestSubstring(str, X, Y);    </script>
12
 
Time Complexity: O(N) Auxiliary Space: O(1) 
divyeshrabadiya07
sanjoy_62
nidhi_biet
rdtank
cpp-string
substring
Competitive Programming
Greedy
Searching
Strings
Searching
Strings
Greedy
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Modulo 10^9+7 (1000000007)
Prefix Sum Array - Implementation and Applications in Competitive Programming
Bits manipulation (Important tactics)
Formatted output in Java
How to begin with Competitive Programming?
Dijkstra's shortest path algorithm | Greedy Algo-7
Kruskal’s Minimum Spanning Tree Algorithm | Greedy Algo-2
Prim’s Minimum Spanning Tree (MST) | Greedy Algo-5
Program for array rotation
Huffman Coding | Greedy Algo-3