3707. Equal Score Substrings
Description
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 substrings s[0..i]
and s[(i + 1)..(n - 1)]
that have equal scores.
Return true
if such a split exists, otherwise return false
.
A substring is a contiguous non-empty sequence of characters within a string.
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 <= 100
s
consists of lowercase English letters.
Solutions
Solution 1: Prefix Sum
We first calculate the total score of the string, denoted as \(r\). Then we traverse the first \(n-1\) characters from left to right, calculating the prefix score \(l\) and updating the suffix score \(r\). If at some position \(i\), the prefix score \(l\) equals the suffix score \(r\), it means there exists an index \(i\) that can split the string into two substrings with equal scores, so we return \(\textit{true}\). If we finish traversing without finding such an index, we return \(\textit{false}\).
The time complexity is \(O(n)\), where \(n\) is the length of the string. The space complexity is \(O(1)\).
1 2 3 4 5 6 7 8 9 10 11 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|