Prefix Sum IX
You are given a string s consisting of lowercase English letters.
The score of a string is the sum of the positions of its characters in the alphabet, where 'a' = 1, 'b' = 2, ..., 'z' = 26.
Determine whether there exists an index i such that the string can be split into two non-empty s[0..i] and s[(i + 1)..(n - 1)] that have equal scores.
Return true if such a split exists, otherwise return false.
Example 1:
Input: s = "adcb"
Output: true
Explanation:
Split at index i = 1:
- Left substring =
s[0..1] = "ad"withscore = 1 + 4 = 5 - Right substring =
s[2..3] = "cb"withscore = 3 + 2 = 5
Both substrings have equal scores, so the output is true.
Example 2:
Input: s = "bace"
Output: false
Explanation:
No split produces equal scores, so the output is false.
Constraints:
2 <= s.length <= 100sconsists of lowercase English letters.
public bool ScoreBalance(string s) {
int[] prefixSum = new int[s.Length];
prefixSum[0] = (int)(s[0] - 'a' + 1);
for (int i = 1; i < s.Length; i++)
prefixSum[i] = prefixSum[i - 1] + (int)(s[i] - 'a' + 1);
for (int i = 0; i < s.Length - 1; i++)
if (2 * prefixSum[i] == prefixSum[s.Length - 1])
return true;
return false;
}
Comments
Post a Comment