LeetCode 809. 情感丰富的文字缩略图

有时候人们会用重复写一些字母来表示额外的感受,比如 "hello" -> "heeellooo""hi" -> "hiii"。我们将相邻字母都相同的一串字符定义为相同字母组,例如:”h”, “eee”, “ll”, “ooo”。

对于一个给定的字符串 S ,如果另一个单词能够通过将一些字母组扩张从而使其和 S 相同,我们将这个单词定义为可扩张的(stretchy)。扩张操作定义如下:选择一个字母组(包含字母 c ),然后往其中添加相同的字母 c 使其长度达到 3 或以上。

例如,以 “hello” 为例,我们可以对字母组 “o” 扩张得到 “hellooo”,但是无法以同样的方法得到 “helloo” 因为字母组 “oo” 长度小于 3。此外,我们可以进行另一种扩张 “ll” -> “lllll” 以获得 “helllllooo”。如果 s = "helllllooo",那么查询词 “hello” 是可扩张的,因为可以对它执行这两种扩张操作使得 query = "hello" -> "hellooo" -> "helllllooo" = s

输入一组查询单词,输出其中可扩张的单词数量。

809. 情感丰富的文字 – 力扣(Leetcode)

LeetCode 809. 情感丰富的文字插图
OpenCV步步精深-可心科创工作室

思路:先排序并统计个数,然后去除特殊情况后剩下的就是符合情况的。

python3实现:

class Solution:
    def expressiveWords(self, s: str, words: List[str]) -> int:
        final_count = 0
        s_ = self.get_key_and_count(s)
        s_key = s_[0]
        s_value = s_[1]

        for elem in words:
            result = self.get_key_and_count(elem)
            result_key = result[0]
            result_value = result[1]

            if result_key == s_key:
                single_count = 0
                for idx in range(len(result_value)):
                    if result_value[idx] > s_value[idx]:
                        print(f"{result_value[idx]} da")
                        break
                    if result_value[idx] != s_value[idx]:
                        if s_value[idx] <= 2:
                            print(f"{s_value[idx]} xiao")
                            break
                    single_count += 1

                if single_count == len(result_value):
                    final_count += 1
            else:
                break
        return final_count

    def get_key_and_count(self, target):
        p = 1
        tmp = target[0]  
        new = tmp
        count_list = []
        tmp_count = 1

        while p <= len(target) - 1:
            if target[p] == tmp:
                tmp_count += 1
            else:
                count_list.append(tmp_count)
                tmp = target[p]
                tmp_count = 1
                new += tmp
            p += 1
            
        count_list.append(tmp_count)
        return new,count_list
LeetCode 809. 情感丰富的文字插图1
OpenCV步步精深-可心科创工作室

更多干货见 OpenCV步步精深

作者 admin

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注