第478题 非重叠子数组的最大和
1.题目分析
题目要求我们计算字符串 SSS 的所有可能表示方式,字符串只包含数字 1 和 2,这些数字可以通过不同大小写组合生成单词。数字可以直接表示为 "1" 或 "2",也可以分别映射为英文单词 "one" 或 "two",单词中的每个字母有小写、大写和标题形式,导致大量的组合。
关键点分析:
-
每个数字有两种主要表示:
- 数字本身(如
"1"或"2")。 - 单词形式(如
"one"或"two")。
- 数字本身(如
-
单词形式的每个字母有 = 8种大小写组合。
-
总组合数由所有字符独立组合计算。
公式推导:
每个字符的组合数为: 1 + = 9
字符串长度为N,总组合数为:
2.解题思路
-
检查输入是否符合要求:
- 字符串 S 长度为 N。
- S 仅包含
1和2。
-
计算组合数:
- 每个字符有 9 种组合。
- N 个字符的组合总数为 。
3.解题代码
def solution(N: int, S: str) -> int:
if not S or len(S) != N or any(c not in "12" for c in S):
raise ValueError("Invalid input: S should be a string of length N containing only '1' and '2'")
# 每个字符可以有 27 种不同的组合
return 9 ** N
if __name__ == '__main__':
print(solution(N = 1, S = "2") == 9)
print(solution(N = 2, S = "12") == 81)
print(solution(N = 3, S = "121") == 729)
4.模块解释
-
输入验证:
- 检查字符串 S 长度是否等于 N。
- 检查 S 是否只包含
1和2。 - 如果输入无效,抛出异常。
-
组合计算:
- 每个字符有 9 种组合,字符串长度 N 的组合数为 。
5.结论
通过分析题目可得:
- 每个数字可以有 9 种不同组合(包含数字本身和单词形式的大小写组合)。
- 对于字符串 S,长度为 N,总组合数为 。
示例验证:
-
样例 1:
- 输入:N=1,S="2"
- 结果:9
-
样例 2:
- 输入:N=2,S="12"
- 结果:81
-
样例 3:
- 输入:N=3,S="121"
- 结果:729
代码逻辑简单且效率高,时间复杂度为 O(1)。