青训营X豆包MarsCode技术训练营|豆包MarsCode AI刷题

29 阅读2分钟

问题描述

小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

看完题目第一眼初步思路是:

  1. 解码过程:我们需要将ASCII值转换为对应的字符。
  2. 检查条件:检查是否所有字符都能组成字符串"ch",这意味着我们需要至少有1个'c'和1个'h',并且不能有其他字符。

再结合MarsCode豆包提供的AI思路提示:

问题理解

你需要将一个整数数组 arr 中的每个整数解码为对应的小写字母,然后判断这些字母是否可以通过任意顺序组成字符串 'ch'

数据结构选择

  • 由于我们需要统计字母的出现次数,并且需要快速判断某个字母是否存在,可以使用 collections.Counter 来统计每个字母的出现次数。

算法步骤

  1. 解码:将数组中的每个整数转换为对应的小写字母。

  2. 统计字母出现次数:使用 collections.Counter 统计每个字母的出现次数。

  3. 检查条件

    • 检查是否存在字母 'c' 和 'h'
    • 检查字母 'c' 和 'h' 的出现次数是否至少各为1。

思路总结

  1. 将整数数组转换为字符串。
  2. 使用 collections.Counter 统计字符串中每个字符的出现次数。
  3. 检查 '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)