Prefix Sum IX

Classic prefix sum to accomplish a linear time solution, with a linear space usage too. Execution time is ~0ms according to LC. Code is down below, cheers, ACC.


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" with score = 1 + 4 = 5
  • Right substring = s[2..3] = "cb" with score = 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.

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

Popular posts from this blog

Shortest Bridge – A BFS Story (with a Twist)

Quasi FSM (Finite State Machine) problem + Vibe

Classic Dynamic Programming IX