Maximum distinct lowercase alphabets between two uppercase
Given a string containing alphabets in lowercase and uppercase, find the maximum count of distinct lowercase alphabets present between two uppercase alphabets.
Examples :
Input : zACaAbbaazzC Output : The maximum count = 3 Input : edxedxxxCQiIVmYEUtLi Output : The maximum count = 1
Method 1 (Using Character Count Array):
- Declare an array of size 26 where each index of the array represents a character in the English alphabet
- Iterate the string over its complete length
- For each lowercase character, increment the index of the corresponding array by 1.
- For each uppercase character, iterate the array and count the number of positions having value greater than zero.
- If this count is greater than the maximum count, update the maximum counter, and initialize the array by 0.
Below is the implementation of the above method.
C++
// CPP Program to find maximum // lowercase alphabets present // between two uppercase alphabets #include <bits/stdc++.h> using namespace std; #define MAX_CHAR 26 // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets int maxLower(string str) { int n = str.length(); // Ignoring lowercase characters in the // beginning. int i = 0; for (; i < n; i++) { if (str[i] >= 'A' && str[i] <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. int maxCount = 0; int count[MAX_CHAR] = { 0 }; for (; i < n; i++) { // If character is in uppercase, if (str[i] >= 'A' && str[i] <= 'Z' ) { // Count all distinct lower case // characters int currCount = 0; for ( int j = 0; j < MAX_CHAR; j++) if (count[j] > 0) currCount++; // Update maximum count maxCount = max(maxCount, currCount); // Reset count array memset (count, 0, sizeof (count)); } // If character is in lowercase if (str[i] >= 'a' && str[i] <= 'z' ) count[str[i] - 'a' ]++; } return maxCount; } // Driver function int main() { string str = "zACaAbbaazzC" ; cout << maxLower(str); return 0; } |
Java
// Java Program to find maximum // lowercase alphabets present // between two uppercase alphabets import java.util.Arrays; class GFG { static final int MAX_CHAR = 26 ; // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets static int maxLower(String str) { int n = str.length(); // Ignoring lowercase characters in the // beginning. int i = 0 ; for (; i < n; i++) { if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. int maxCount = 0 ; int count[] = new int [MAX_CHAR]; for (; i < n; i++) { // If character is in uppercase, if (str.charAt(i) >= 'A' && str.charAt(i) <= 'Z' ) { // Count all distinct lower case // characters int currCount = 0 ; for ( int j = 0 ; j < MAX_CHAR; j++) { if (count[j] > 0 ) { currCount++; } } // Update maximum count maxCount = Math.max(maxCount, currCount); // Reset count array Arrays.fill(count, 0 ); } // If character is in lowercase if (str.charAt(i) >= 'a' && str.charAt(i) <= 'z' ) { count[str.charAt(i) - 'a' ]++; } } return maxCount; } // Driver code public static void main(String[] args) { String str = "zACaAbbaazzC" ; System.out.println(maxLower(str)); } } // This code is contributed by Rajput-Ji |
Python3
# Python3 Program to find maximum # lowercase alphabets present # between two uppercase alphabets MAX_CHAR = 26 # Function which computes the # maximum number of distinct # lowercase alphabets between # two uppercase alphabets def maxLower( str ): n = len ( str ) # Ignoring lowercase characters # in the beginning. i = 0 for i in range (n): if str [i] > = 'A' and str [i] < = 'Z' : i + = 1 break # We start from next of first capital # letter and traverse through # remaining character. maxCount = 0 count = [] for j in range (MAX_CHAR): count.append( 0 ) for j in range (i, n): # If character is in uppercase, if str [j] > = 'A' and str [j] < = 'Z' : # Count all distinct lower # case characters currCount = 0 for k in range (MAX_CHAR): if count[k] > 0 : currCount + = 1 # Update maximum count maxCount = max (maxCount, currCount) # Reset count array for y in count: y = 0 # If character is in lowercase if str [j] > = 'a' and str [j] < = 'z' : count[ ord ( str [j]) - ord ( 'a' )] + = 1 return maxCount # Driver function str = "zACaAbbaazzC" ; print (maxLower( str )) # This code is contributed by Upendra Bartwal |
C#
// C# Program to find maximum // lowercase alphabets present // between two uppercase alphabets using System; using System.Collections.Generic; class GFG { static int MAX_CHAR = 26; // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets static int maxLower(String str) { int n = str.Length; // Ignoring lowercase characters in the // beginning. int i = 0; for (; i < n; i++) { if (str[i] >= 'A' && str[i] <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. int maxCount = 0; int []count = new int [MAX_CHAR]; for (; i < n; i++) { // If character is in uppercase, if (str[i] >= 'A' && str[i] <= 'Z' ) { // Count all distinct lower case // characters int currCount = 0; for ( int j = 0; j < MAX_CHAR; j++) { if (count[j] > 0) { currCount++; } } // Update maximum count maxCount = Math.Max(maxCount, currCount); // Reset count array Array.Fill(count, 0); } // If character is in lowercase if (str[i] >= 'a' && str[i] <= 'z' ) { count[str[i] - 'a' ]++; } } return maxCount; } // Driver code public static void Main(String[] args) { String str = "zACaAbbaazzC" ; Console.WriteLine(maxLower(str)); } } // This code is contributed by PrinciRaj1992 |
PHP
<?php // PHP Program to find maximum // lowercase alphabets present // between two uppercase alphabets $MAX_CHAR = 26; // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets function maxLower( $str ) { global $MAX_CHAR ; $n = strlen ( $str ); // Ignoring lowercase characters in // the beginning. $i = 0; for (; $i < $n ; $i ++) { if ( $str [ $i ] >= 'A' && $str [ $i ] <= 'Z' ) { $i ++; break ; } } // We start from next of first capital letter // and traverse through remaining character. $maxCount = 0; $count = array_fill (0, $MAX_CHAR , NULL); for (; $i < $n ; $i ++) { // If character is in uppercase, if ( $str [ $i ] >= 'A' && $str [ $i ] <= 'Z' ) { // Count all distinct lower case // characters $currCount = 0; for ( $j = 0; $j < $MAX_CHAR ; $j ++) if ( $count [ $j ] > 0) $currCount ++; // Update maximum count $maxCount = max( $maxCount , $currCount ); // Reset count array $count = array_fill (0, $MAX_CHAR , NULL); } // If character is in lowercase if ( $str [ $i ] >= 'a' && $str [ $i ] <= 'z' ) $count [ord( $str [ $i ]) - ord( 'a' )]++; } return $maxCount ; } // Driver Code $str = "zACaAbbaazzC" ; echo maxLower( $str ); // This code is contributed by ita_c ?> |
Javascript
<script> // Javascript Program to find maximum // lowercase alphabets present // between two uppercase alphabets let MAX_CHAR = 26; // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets function maxLower(str) { let n = str.length; // Ignoring lowercase characters in the // beginning. let i = 0; for (; i < n; i++) { if (str[i] >= 'A' && str[i] <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. let maxCount = 0; let count = new Array(MAX_CHAR); for (; i < n; i++) { // If character is in uppercase, if (str[i] >= 'A' && str[i] <= 'Z' ) { // Count all distinct lower case // characters let currCount = 0; for (let j = 0; j < MAX_CHAR; j++) { if (count[j] > 0) { currCount++; } } // Update maximum count maxCount = Math.max(maxCount, currCount); // Reset count array for (let i=0;i<count.length;i++) { count[i]=0; } } // If character is in lowercase if (str[i] >= 'a' && str[i] <= 'z' ) { count[str[i].charCodeAt(0) - 'a' .charCodeAt(0)]++; } } return maxCount; } // Driver code let str = "zACaAbbaazzC" ; document.write(maxLower(str)); // This code is contributed by avanitrachhadiya2155 </script> |
Output:
3
Time Complexity: O(n).
Auxiliary Space: O(1).
Method 2 (Using Hash Table): In this method, we extensively use the C++ STL container unordered_set.
Below is the implementation of the above method :
C++
// CPP Program to find maximum // lowercase alphabets present // between two uppercase alphabets #include <bits/stdc++.h> using namespace std; // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets int maxLower(string str) { int n = str.length(); // Ignoring lowercase characters in the // beginning. int i = 0; for (; i < n; i++) { if (str[i] >= 'A' && str[i] <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. int maxCount = 0; unordered_set< int > s; for (; i < n; i++) { // If character is in uppercase, if (str[i] >= 'A' && str[i] <= 'Z' ) { // Update maximum count if lowercase // character before this is more. maxCount = max(maxCount, ( int )s.size()); // clear the set s.clear(); } // If character is in lowercase if (str[i] >= 'a' && str[i] <= 'z' ) s.insert(str[i]); } return maxCount; } // Driver function int main() { string str = "zACaAbbaazzC" ; cout << maxLower(str); return 0; } |
Java
// Java Program to find maximum // lowercase alphabets present // between two uppercase alphabets import java.util.*; class GFG { // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets static int maxLower( char [] str) { int n = str.length; // Ignoring lowercase characters in the // beginning. int i = 0 ; for (; i < n; i++) { if (str[i] >= 'A' && str[i] <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. int maxCount = 0 ; HashSet<Integer> s = new HashSet<Integer>(); for (; i < n; i++) { // If character is in uppercase, if (str[i] >= 'A' && str[i] <= 'Z' ) { // Update maximum count if lowercase // character before this is more. maxCount = Math.max(maxCount, ( int )s.size()); // clear the set s.clear(); } // If character is in lowercase if (str[i] >= 'a' && str[i] <= 'z' ) s.add(( int )str[i]); } return maxCount; } // Driver Code public static void main(String args[]) { String str = "zACaAbbaazzC" ; System.out.println(maxLower(str.toCharArray())); } } // This code is contributed by PrinciRaj1992 |
Python3
# Python3 Program to find maximum # lowercase alphabets present # between two uppercase alphabets # Function which computes the # maximum number of distinct # lowercase alphabets between # two uppercase alphabets def maxLower( str ): n = len ( str ); # Ignoring lowercase characters # in the beginning. i = 0 ; for i in range (n): if ( str [i] > = 'A' and str [i] < = 'Z' ): i + = 1 ; break ; # We start from next of first # capital letter and traverse # through remaining character. maxCount = 3 ; s = set () for i in range (n): # If character is in # uppercase, if ( str [i] > = 'A' and str [i] < = 'Z' ): # Update maximum count if # lowercase character before # this is more. maxCount = max (maxCount, len (s)); # clear the set s.clear(); # If character is in # lowercase if ( str [i] > = 'a' and str [i] < = 'z' ): s.add( str [i]); return maxCount; # Driver Code if __name__ = = '__main__' : str = "zACaAbbaazzC" ; print (maxLower( str )); # This code is contributed by 29AjayKumar |
C#
// C# Program to find maximum // lowercase alphabets present // between two uppercase alphabets using System; using System.Collections.Generic; class GFG { // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets static int maxLower( char [] str) { int n = str.Length; // Ignoring lowercase characters in the // beginning. int i = 0; for (; i < n; i++) { if (str[i] >= 'A' && str[i] <= 'Z' ) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. int maxCount = 0; HashSet< int > s = new HashSet< int >(); for (; i < n; i++) { // If character is in uppercase, if (str[i] >= 'A' && str[i] <= 'Z' ) { // Update maximum count if lowercase // character before this is more. maxCount = Math.Max(maxCount, ( int )s.Count); // clear the set s.Clear(); } // If character is in lowercase if (str[i] >= 'a' && str[i] <= 'z' ) s.Add(( int )str[i]); } return maxCount; } // Driver Code public static void Main(String []args) { String str = "zACaAbbaazzC" ; Console.WriteLine(maxLower(str.ToCharArray())); } } // This code is contributed by Rajput-Ji |
Javascript
<script> // Javascript Program to find maximum // lowercase alphabets present // between two uppercase alphabets // Function which computes the // maximum number of distinct // lowercase alphabets between // two uppercase alphabets function maxLower(str) { let n = str.length; // Ignoring lowercase characters in the // beginning. let i = 0; for (; i < n; i++) { if (str[i].charCodeAt(0) >= 'A' .charCodeAt(0) && str[i].charCodeAt(0) <= 'Z' .charCodeAt(0)) { i++; break ; } } // We start from next of first capital letter // and traverse through remaining character. let maxCount = 0; let s = new Set(); for (; i < n; i++) { // If character is in uppercase, if (str[i].charCodeAt(0) >= 'A' .charCodeAt(0) && str[i].charCodeAt(0) <= 'Z' .charCodeAt(0)) { // Update maximum count if lowercase // character before this is more. maxCount = Math.max(maxCount, s.size); // clear the set s.clear(); } // If character is in lowercase if (str[i].charCodeAt(0) >= 'a' .charCodeAt(0) && str[i].charCodeAt(0) <= 'z' .charCodeAt(0)) s.add(str[i]); } return maxCount; } // Driver Code let str = "zACaAbbaazzC" ; document.write(maxLower(str.split( "" ))); // This code is contributed by rag2127 </script> |
Output:
3
Time complexity : O(n)
Auxiliary Space: O(n).
Please Login to comment...