华为od机试 Python 【切割字符串】

题目

给定一个由小写字母组成的字符串。请找出两个位置,将字符串分为三部分。这三部分的总和应该是相同的,其中每部分的总和是其字符的ASCII码值的总和。注意,这两个位置的字符不包括在这三部分内。

如果你找到了这两个位置,请输出它们的位置。如果没有找到,请输出0,0。

例子:

输入: acdbbbca
输出: 2,5
这是因为当我们在位置2和5进行分割,我们得到三个部分:ac,bb,ca。它们的ASCII码值的总和都是相同的。

输入: abcabc
输出: 0,0
在这个例子中,我们找不到这样的两个位置。

题目解释

我们需要找到两个位置,将字符串分成三部分,并且哲三部分的ASCII码值总和相同。比如:在字符串 “acdbbbca” 中,可以在第2和第5个位置切割字符串,得到 “ac”、“bb” 和 “ca” 三个子串。这三个子串的ASCII码值总和都是195。
通过get_prefix_sum 可以算出给定字符串每个前缀的ASCII码值总和,得到一个前缀和数组。前缀和数组的第i个元素存储的是字符串前i个字符的ASCII码值的总和。有了前缀和数组之后,就能找出任意子串的ASCII码值总和。determine_positions 可以将字符串分割成三个ASCII码值总和相等的子串的两个位置。

代码

def determine_positions(<

你可能感兴趣的:(python,华为od,开发语言,华为机试)