今天做了豆包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循环,每次进行操作:遍历当前字符串,对分别对a、b、c的情况进行处理。使用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)