Leetcode每日一题提供了一个有趣的算法挑战:1930. 长度为 3 的不同回文子序列。这个问题要求我们统计给定字符串中所有长度为3的不同回文子序列的数量。回文子序列是指正读和反读都相同的子序列。考虑到字符串的长度可以非常大,我们需要一个高效的算法来解决这个问题。

在提供的解决方案中,首先将字符串转换为字符数组,并使用一个数组来记录每个字符的出现次数。接着,遍历字符串,对于每个字符,如果它之前没有出现过,则从字符串的尾部寻找与它相同的字符,并计算中间有多少不同的字符。这些不同的字符数量就是以当前字符为起止的回文子序列的数量。这个过程一直持续到遍历完字符串。

具体实现中,定义了一个辅助函数getSingleCount,它接受字符数组、当前字符和当前字符的索引作为参数。这个函数从当前字符的下一个位置开始,直到找到与当前字符相同的字符为止,计算中间有多少不同的字符。这个数量就是以当前字符为起止的回文子序列的数量。

这种方法的时间复杂度是O(n^2),其中n是字符串的长度。虽然这个复杂度对于长度非常大的字符串来说可能不是最优的,但由于题目中给出的字符串长度上限为10^5,这个方法在实际应用中是可行的。

总的来说,这个问题的解决方案提供了一个简单而有效的算法,可以用来解决类似的字符串处理问题。通过这个练习,我们可以加深对字符串操作和算法设计的理解。

标签: none

评论已关闭