LeetCode - 2207. 字符串中最多数目的子序列
题目链接:2207. 字符串中最多数目的子序列
思路
由于子序列长度只有2,所以要么首位插入队头,要么末位插入队尾,就能取得最大数目。
于是遍历一遍字符串,统计pattern[0]
和 pattern[1]
的个数,两者取最大值,就是插入的字符组成的子序列个数。
那么我们应该如何在只遍历一遍的情况下得到原本字符串中的子序列个数(未插入情况下)呢?
- 在统计
pattern
时,如果统计到pattern[1]
,就可以与前面的pattern[0]
组合成若干子序列,数目为之前统计到的pattern[0]
的个数。
CODE
long long maximumSubsequenceCount(char* text, char* pattern) {
int num = strlen(text);
long long ans = 0;
long long con = 0;
long long l = 0;
long long r = 0;
for(const char* c = text; *c; ++c){
if(*c == pattern[1]){
con += l;
r++;
}
if(*c == pattern[0]){
l++;
}
}
return fmax(l, r) + con;
}