恰好有 k 个字符且 ASCII 值大于 p 的子字符串
给定一个字符串'str',两个整数'k'和'p'。任务是计算 'str' 的所有子字符串,其中正好有 'k' 个字符,其 ASCII 值大于 'p'。
例子:
Input: str = “abcd”, k=2, p=98
Output: 3
Only the characters ‘c’ and ‘d’ have ASCII values greater than 98,
And, the sub-strings containing them are “abcd”, “bcd” and “cd”.
Input: str = “sabrcd”, k=5, p=80
Output: 2
方法:我们只需要遍历所有索引并获取所有可能长度的子字符串,然后检查子字符串是否正好包含 ASCII 值大于“p”的“k”个字符。
Typecasting a character to int will give us it’s ASCII value i.e. int ascii = (int) char.
下面是上述方法的实现:
C++
// C++ implementation of the approach
#include
using namespace std;
// Function that checks if
// the string contain exactly
// K characters having ASCII
// value greater than p
bool isValidSubString(string r, int K, int p)
{
int c = 0;
for (int i = 0; i < r.length(); i++) {
// if ASCII value is
// greater than 'p'
if ((int)r[i] > p)
c++;
}
// if count of satisfying
// characters is equal to 'K'
// then return true
if (c == K)
return true;
// otherwise return false
else
return false;
}
// function to count sub-strings
void countSubStrings(string s, int K, int p)
{
// length of the string
int l = s.length();
// count of sub-strings
int count = 0;
// 'i' is the starting
// index for the sub-string
for (int i = 0; i < l; i++) {
// 'j' is the no. of characters
// to include in the sub-string
for (int j = K; (i + j) <= l; j++) {
string r = s.substr(i, j);
// check if the sub-string
// satisfies the condition
if (isValidSubString(r, K, p))
count++;
}
}
cout << count << "\n";
}
// Driver code
int main()
{
string s = "abepztydba";
int K = 4;
int p = 110;
countSubStrings(s, K, p);
return 0;
}
Java
// Java implementation of the approach
class GFG {
// Function that checks if
// the String contain exactly
// K characters having ASCII
// value greater than p
boolean isValidSubString(String r, int K, int p)
{
int c = 0;
for (int i = 0; i < r.length(); i++) {
// if ASCII value is
// greater than 'p'
if ((int)r.charAt(i) > p) {
c++;
}
}
// if count of satisfying
// characters is equal to 'K'
// then return true
if (c == K) {
return true;
}
// otherwise return false
else {
return false;
}
}
// function to count sub-Strings
void countSubStrings(String s, int K, int p)
{
// length of the String
int l = s.length();
// count of sub-Strings
int count = 0;
// 'i' is the starting
// index for the sub-String
for (int i = 0; i < l; i++) {
// 'j' is the no. of characters
// to include in the sub-String
for (int j = K; (i + j) <= l; j++) {
String r = s.substring(i, (i + j));
// check if the sub-String
// satisfies the condition
if (isValidSubString(r, K, p)) {
count++;
}
}
}
System.out.println(count);
}
// Driver code
public static void main(String args[])
{
GFG g = new GFG();
String s = "abepztydba";
int K = 4;
int p = 110;
g.countSubStrings(s, K, p);
}
}
// This code has been contributed by 29AjayKumar
Python3
# Python3 implementation of the approach
# Function that checks if the string
# contain exactly K characters having
# ASCII value greater than p
def isValidSubString(r, K, p):
c = 0
for i in range(0, len(r)):
# if ASCII value is
# greater than 'p'
if ord(r[i]) > p:
c += 1
# if count of satisfying
# characters is equal to 'K'
# then return true
if c == K:
return True
# otherwise return false
else:
return False
# function to count sub-strings
def countSubStrings(s, K, p):
# length of the string
l = len(s)
# count of sub-strings
count = 0
# 'i' is the starting
# index for the sub-string
for i in range(0, l):
# 'j' is the no. of characters
# to include in the sub-string
for j in range(K, l - i + 1):
r = s[i:i + j]
# check if the sub-string
# satisfies the condition
if isValidSubString(r, K, p) == True:
count += 1
print(count)
# Driver code
if __name__ == "__main__":
s = "abepztydba"
K, p = 4, 110
countSubStrings(s, K, p)
# This code is contributed by Rituraj Jain
C#
// C# implementation of the approach
using System;
class GFG {
// Function that checks if
// the String contain exactly
// K characters having ASCII
// value greater than p
bool isValidSubString(String r, int K, int p)
{
int c = 0;
for (int i = 0; i < r.Length; i++) {
// if ASCII value is
// greater than 'p'
if ((int)r[i] > p) {
c++;
}
}
// if count of satisfying
// characters is equal to 'K'
// then return true
if (c == K) {
return true;
}
// otherwise return false
else {
return false;
}
}
// function to count sub-Strings
void countSubStrings(String s, int K, int p)
{
// length of the String
int l = s.Length;
// count of sub-Strings
int count = 0;
// 'i' is the starting
// index for the sub-String
for (int i = 0; i < l; i++) {
// 'j' is the no. of characters
// to include in the sub-String
for (int j = K; (i + j) <= l; j++) {
String r = s.Substring(i, j);
// check if the sub-String
// satisfies the condition
if (isValidSubString(r, K, p)) {
count++;
}
}
}
Console.WriteLine(count);
}
// Driver code
public static void Main(String[] args)
{
GFG g = new GFG();
String s = "abepztydba";
int K = 4;
int p = 110;
g.countSubStrings(s, K, p);
}
}
/* This code contributed by PrinciRaj1992 */
Javascript
输出:
16