📜  恰好有 k 个字符且 ASCII 值大于 p 的子字符串

📅  最后修改于: 2022-05-13 01:57:05.074000             🧑  作者: Mango

恰好有 k 个字符且 ASCII 值大于 p 的子字符串

给定一个字符串'str',两个整数'k'和'p'。任务是计算 'str' 的所有子字符串,其中正好有 'k' 个字符,其 ASCII 值大于 'p'。
例子:

方法:我们只需要遍历所有索引并获取所有可能长度的子字符串,然后检查子字符串是否正好包含 ASCII 值大于“p”的“k”个字符。

下面是上述方法的实现:

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