两个大写字母之间的最大不同小写字母

给定包含小写和大写字母的字符串,查找两个大写字母之间存在的不同小写字母的最大计数。 例子 :

null
Input : zACaAbbaazzCOutput : The maximum count = 3Input : edxedxxxCQiIVmYEUtLiOutput : The maximum count = 1

方法1(使用字符计数数组):

  • 声明一个大小为26的数组,其中数组的每个索引表示英文字母表中的一个字符
  • 迭代字符串的整个长度
  • 对于每个小写字符,将相应数组的索引增加1。
  • 对于每个大写字符,迭代数组并计算值大于零的位置数。
  • 如果此计数大于最大计数,则更新最大计数器,然后 将数组初始化为0 .

下面是上述方法的实现。

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>


输出:

3

时间复杂性: O(n)。

辅助空间: O(1)。 方法2(使用哈希表): 在这种方法中,我们广泛使用C++ STL容器。 无序集 . 以下是上述方法的实施:

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>


输出:

3

时间复杂性: 0(n)

辅助空间: O(n)。

© 版权声明
THE END
喜欢就支持一下吧
点赞11 分享