. - 力扣(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)