From e0fc4606426f81e7c5fefbc09d3c8c05505de701 Mon Sep 17 00:00:00 2001 From: Vedeesh Dwivedi Date: Tue, 21 Oct 2025 12:35:18 +0530 Subject: [PATCH] Add LC_maxnopartafterop class for partition operations --- .../LC_maxnopartafterop.java | 62 +++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/test/java/LeetCode/Maximize_the_Number_of_Partitions_After_Operations/LC_maxnopartafterop.java diff --git a/src/test/java/LeetCode/Maximize_the_Number_of_Partitions_After_Operations/LC_maxnopartafterop.java b/src/test/java/LeetCode/Maximize_the_Number_of_Partitions_After_Operations/LC_maxnopartafterop.java new file mode 100644 index 00000000..c23ccb19 --- /dev/null +++ b/src/test/java/LeetCode/Maximize_the_Number_of_Partitions_After_Operations/LC_maxnopartafterop.java @@ -0,0 +1,62 @@ +public class LC_maxnopartafterop { + + public int maxPartitionsAfterOperations(String s, int k) { + int n = s.length(); + int[][] left = new int[n][3]; + int[][] right = new int[n][3]; + + int num = 0; + int mask = 0; + int count = 0; + for (int i = 0; i < n - 1; i++) { + int binary = 1 << (s.charAt(i) - 'a'); + if ((mask & binary) == 0) { + count++; + if (count <= k) { + mask |= binary; + } else { + num++; + mask = binary; + count = 1; + } + } + left[i + 1][0] = num; + left[i + 1][1] = mask; + left[i + 1][2] = count; + } + + num = 0; + mask = 0; + count = 0; + for (int i = n - 1; i > 0; i--) { + int binary = 1 << (s.charAt(i) - 'a'); + if ((mask & binary) == 0) { + count++; + if (count <= k) { + mask |= binary; + } else { + num++; + mask = binary; + count = 1; + } + } + right[i - 1][0] = num; + right[i - 1][1] = mask; + right[i - 1][2] = count; + } + + int maxVal = 0; + for (int i = 0; i < n; i++) { + int seg = left[i][0] + right[i][0] + 2; + int totMask = left[i][1] | right[i][1]; + int totCount = Integer.bitCount(totMask); + if (left[i][2] == k && right[i][2] == k && totCount < 26) { + seg++; + } else if (Math.min(totCount + 1, 26) <= k) { + seg--; + } + maxVal = Math.max(maxVal, seg); + } + return maxVal; + } +}