// 1422. Maximum Score After Splitting a String #include "leetcode.h" /* * given a string 's' of zeros and ones, return the maximum score after * splitting the string into two non-empty substrings (ie. left and right). the * score after splitting a string is the number of zeros in the left substring * plus the number of ones in the right substring. */ int maxScore(char *s) { int n = strlen(s), ans = 0; int *suffix_one = malloc(n * sizeof(int)); int *prefix_zero = malloc(n * sizeof(int)); suffix_one[n - 1] = (s[n - 1] == '1'); for (int i = n - 2; i >= 0; i--) suffix_one[i] = suffix_one[i + 1] + (s[i] == '1'); prefix_zero[0] = (s[0] == '0'); for (int i = 1; i < n; i++) prefix_zero[i] = prefix_zero[i - 1] + (s[i] == '0'); for (int i = 1; i < n; i++) ans = fmax(ans, suffix_one[i] + prefix_zero[i - 1]); return ans; } int main() { char *s1 = "011101", *s2 = "00111", *s3 = "1111"; printf("%d\n", maxScore(s1)); // expect: 5 printf("%d\n", maxScore(s2)); // expect: 5 printf("%d\n", maxScore(s3)); // expect: 3 }