$O(n)$
임의의 경계에 대해 이를 기준으로 왼편과 오른편의 H, P, S만의 최대 개수 합의 최댓값이 답이 된다.
#include<cstdio> int n, s[3][100001], res; int main() { scanf("%d", &n); for (int i = 1; i <= n; i++) { char c; scanf(" %c", &c); for (int j = 0; j < 3; j++) s[j][i] += s[j][i - 1]; s[(c - 'A') / 8][i]++; } for (int i = 1; i <= n; i++) { int l = 0, r = 0; for (int j = 0; j < 3; j++) { if (l < s[j][i]) l = s[j][i]; if (r < s[j][n] - s[j][i]) r = s[j][n] - s[j][i]; } if (res < l + r) res = l + r; } printf("%d", res); return 0; }
댓글 없음 :
댓글 쓰기