问题143 字符串`chhc`子串权值求和| 豆包MarsCode AI刷题

58 阅读2分钟

问题描述

小M正在研究一个由字母'c''h'组成的字符串,他的任务是计算该字符串所有子串中,出现的子串"chhc"的总次数。我们定义一个字符串的权值为其包含"chhc"子串的数量。你的任务是帮助小M求出整个字符串中所有子串的权值之和。

思路

考虑对于每一个"chhc",最终答案中有多少数值可以归功于该字符串,不难发现其数目为包含该段的子串的数量

设该"chhc"的起始坐标为i,终止为i+3。如果一个从left开始到right结束的子串包含他,则left小于等于i,right大于等于i+3即可

代码示例
int solution(string s) {
    int res = 0;
    for(int i=0;i<int(s.size())-3;i++) {
        if(s.substr(i,4) == "chhc") {
            int left_count = i-0+1;
            int right_count =  (s.size()-1) - (i+3) + 1;
            res += left_count * right_count;
        }
    }
    return res;
}
代码示例

int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; } int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; } int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; } int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; } int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; } int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; } int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; }int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; }int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; }int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; }int solution(string s) { int res = 0; for(int i=0;i<int(s.size())-3;i++) { if(s.substr(i,4) == "chhc") { int left_count = i-0+1; int right_count = (s.size()-1) - (i+3) + 1; res += left_count * right_count; } } return res; }