小D的'abc'变换问题、组成字符串ku的最大次数、不同整数的计数问题| 豆包MarsCode AI刷题

59 阅读3分钟

今天做了豆包MarsCode AI刷题题库中的三道题:小D的'abc'变换问题、组成字符串ku的最大次数、不同整数的计数问题,分享一下我的解题过程。

小D的'abc'变换问题

问题描述

小D拿到了一个仅由 "abc" 三种字母组成的字符串。她每次操作会对所有字符同时进行以下变换:

  • 将 'a' 变成 'bc'
  • 将 'b' 变成 'ca'
  • 将 'c' 变成 'ab'

小D将重复该操作 k 次。你的任务是输出经过 k 次变换后,得到的最终字符串。

例如:对于初始字符串 "abc",执行 2 次操作后,字符串将变为 "caababbcbcca"

测试样例

样例1:

输入:s = "abc", k = 2
输出:'caababbcbcca'

样例2:

输入:s = "abca", k = 3
输出:'abbcbccabccacaabcaababbcabbcbcca'

样例3:

输入:s = "cba", k = 1
输出:'abcabc'

解题思路

使用while循环,每次进行操作:遍历当前字符串,对分别对abc的情况进行处理。使用new_string存储每次变换后的字符串,并将其设置为当前字符串。

代码实现

def solution(s: str, k: int) -> str:
    last_string = s
    while k > 0:
        new_string = ''
        for i in last_string:
            if i == 'a':
                new_string += 'bc'
            elif i == 'b':
                new_string += 'ca'
            else:
                new_string += 'ab'
        last_string = new_string
        k -= 1
    return last_string

组成字符串ku的最大次数

问题描述

给定一个字符串 ss,该字符串中只包含英文大小写字母。你需要计算从字符串中最多能组成多少个字符串 "ku"。每次可以随机从字符串中选一个字符,并且选中的字符不能再使用。字符串中的字符大小写可以忽略,即大写和小写字母视为相同。

例如,输入 "AUBTMKAxfuu",从中最多能组成 1 个 "ku"


测试样例

样例1:

输入:s = "AUBTMKAxfuu"
输出:1

样例2:

输入:s = "KKuuUuUuKKKKkkkkKK"
输出:6

样例3:

输入:s = "abcdefgh"
输出:0

解题思路

创建一个字典,存储字符k和u的出现次数,然后返回出现次数的最小值即可。注意要包含大小写字母的情况。

代码实现

def solution(s: str) -> int:
    dict = {}
    dict['k'] = 0
    dict['u'] = 0
    for i in s:
        if i == 'k' or i == 'K':
            dict['k'] += 1
        elif i == 'u' or i == 'U':
            dict['u'] += 1
    count = min(dict.values())
    return count

不同整数的计数问题

问题描述

小R有一个字符串 word,该字符串由数字和小写英文字母组成。小R想用空格替换每一个不是数字的字符。然后,他希望统计在替换后剩下的整数中,不同整数的数目。

例如,给定字符串 "a123bc34d8ef34",替换后形成的字符串是 " 123 34 8 34",剩下的整数是 "123""34""8" 和 "34"。不同的整数有三个,即 "123""34" 和 "8"

注意,只有当两个整数的不含前导零的十进制表示不同,才认为它们是不同的整数。


测试样例

样例1:

输入:word = "a123bc34d8ef34"
输出:3

样例2:

输入:word = "t1234c23456"
输出:2

样例3:

输入:word = "a1b01c001d4"
输出:2

解题思路

首先遍历字符串,找到不是数字的字符替换为空格,可使用isdigit();再使用split(),按空格分割不同数字;然后去除分割出来的数字字符串的前导0,可以使用lstrip(),或将字符串转为int再转为str。最后再转为集合去重,返回集合中元素个数。

代码实现

def solution(word: str) -> int:
    processed_word = ''
    for c in word:
        if c.isdigit():
            processed_word += c
        else:
            processed_word += ' '
    splited_words = processed_word.split()
    cleaned_numbers = [str(int(num)) for num in splited_words]
    unique_numbers = set(cleaned_numbers)

    return len(unique_numbers)