问题描述
小M得到一个整数数组 arr
,其中每个整数代表小写字母的 ASCII 值(小写 'a'
的 ASCII 值为 97
,小写 'z'
的 ASCII 值为 122
)。需要将数组中的值解码为对应的字母。如果解码后的所有字母能够通过任意顺序组成字符串 'ch'
,则解码成功,返回 1
;否则返回 0
。
测试样例
样例1:
输入:
arr = [97, 98, 99, 122, 105]
输出:False
样例2:
输入:
arr = [99, 104]
输出:True
样例3:
输入:
arr = [99, 97, 98]
输出:False
看完题目第一眼初步思路是:
- 解码过程:我们需要将ASCII值转换为对应的字符。
- 检查条件:检查是否所有字符都能组成字符串"ch",这意味着我们需要至少有1个'c'和1个'h',并且不能有其他字符。
再结合MarsCode豆包提供的AI思路提示:
问题理解
你需要将一个整数数组 arr
中的每个整数解码为对应的小写字母,然后判断这些字母是否可以通过任意顺序组成字符串 'ch'
。
数据结构选择
- 由于我们需要统计字母的出现次数,并且需要快速判断某个字母是否存在,可以使用
collections.Counter
来统计每个字母的出现次数。
算法步骤
-
解码:将数组中的每个整数转换为对应的小写字母。
-
统计字母出现次数:使用
collections.Counter
统计每个字母的出现次数。 -
检查条件:
- 检查是否存在字母
'c'
和'h'
。 - 检查字母
'c'
和'h'
的出现次数是否至少各为1。
- 检查是否存在字母
思路总结
- 将整数数组转换为字符串。
- 使用
collections.Counter
统计字符串中每个字符的出现次数。 - 检查
'c'
和'h'
是否存在且出现次数至少为1。
于是我们可以得到这样的代码:
from collections import Counter
def solution(arr: list) -> bool:
# 解码数组中的每个整数为对应的字符
decoded_string = ''.join(chr(x) for x in arr)
# 使用 Counter 统计每个字符的出现次数
char_count = Counter(decoded_string)
# 检查是否存在 'c' 和 'h',并且它们的数量至少各为 1
return 'c' in char_count and 'h' in char_count and char_count['c'] >= 1 and char_count['h'] >= 1
if __name__ == '__main__':
print(solution([97, 98, 99, 122, 105]) == False)
print(solution([99, 104]) == True)
print(solution([99, 97, 98]) == False)