. - 力扣(LeetCode)
class Solution:
# 由题意可知插入的位置在最前面插入pattern[0],或者最后面插入pattern[1]即可,其他情况不需要考虑
# 插入子序列出现频率少的字符即可
# pattern[0]出现频次少就将pattern[0]插入到前面,pattern[1]出现频次少就将pattern[1]插入到最后面
# 参考答案后:统计可将每次出现pattern[1]时,即可匹配在当前出现位置之前所有出现的pattern[0]字符组成子序列
# 还需要特殊考虑当pattern[0]=pattern[1]时候的情况。当他们相等时,在任意位置插入该字符即可,然后使用等差数列求和公式求出结果
# 参考答案是先判断pattern[1],即可兼容pattern[0]=pattern[1]的情况。不需要使用等差数列的累加,但是需要用两个if去判断,效率没有我这个高
def maximumSubsequenceCount(self, text: str, pattern: str) -> int:
ans = c1_count = c2_count = 0
for c in text:
if c == pattern[0]:
c1_count += 1
elif c == pattern[1]:
c2_count += 1
ans += c1_count
if pattern[0] == pattern[1]:
return (1 + c1_count - 1) * (c1_count + 1) // 2
return ans + max(c1_count, c2_count)
# 官方的解题
def _maximumSubsequenceCount(self, text: str, pattern: str) -> int:
res = cnt1 = cnt2 = 0
for c in text:
if c == pattern[1]:
res += cnt1
cnt2 += 1
if c == pattern[0]:
cnt1 += 1
return res + max(cnt1, cnt2)