| 模型 | 模型答案 | 正确答案 |
|---|---|---|
| 金声玉亮2.0 | ```python for j in range(26): if (mask >> j) & 1: if popcount(left_mask[i] | (1 << j)) <= k and popcount((1 << j) | right_mask[i+1]) <= k: curr += 1 break result = max(result, curr) return result + 1 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| deepseek-r1 | ```python if popcount(mask) == k + 1 and ((left_mask[i] & ~right_mask[i+1]) != 0 or (right_mask[i+1] & ~left_mask[i]) != 0): result = max(result, curr + 1) # Check all possible characters for s[i] for c in [chr(ord('a') + j) for j in range(26)]: new_left = left_mask[i] if c != s[i]: new_left = (new_left & ~(1 << (ord(s[i]) - ord('a')))) | (1 << (ord(c) - ord('a'))) new_mask = new_left | right_mask[i+1] if popcount(new_mask) <= k: result = max(result, curr + 1) break result = max(result, left[-1]) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| gpto1 | ```python result = left[len(s)] for i in range(len(s)): for c in range(26): ch = chr(ord('a') + c) if ch == s[i]: continue delta = 0 temp_left_mask = left_mask[i+1] ^ (1<<(ord(s[i])-ord('a'))) | (1<<(ord(ch)-ord('a'))) if popcount(temp_left_mask) > k and popcount(left_mask[i+1]) <= k: delta += 1 elif popcount(temp_left_mask) <= k and popcount(left_mask[i+1]) > k: delta -= 1 temp_right_mask = right_mask[i] ^ (1<<(ord(s[i])-ord('a'))) | (1<<(ord(ch)-ord('a'))) if popcount(temp_right_mask) > k and popcount(right_mask[i]) <= k: delta +=1 elif popcount(temp_right_mask) <= k and popcount(right_mask[i]) > k: delta -=1 total_partitions = left[i] + right[i+1] + delta result = max(result, total_partitions) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| gpt-4o-2024-08-06 | ```python if popcount(mask) <= k: curr += 1 result = max(result, curr) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| Meta-Llama-3.1-405B-Instruct-Turbo | ```python if popcount(mask) <= k: result = max(result, curr) else: for j in range(26): if (mask & (1 << j)) == 0: new_mask = mask | (1 << j) if popcount(new_mask) <= k: result = max(result, curr + 1) return result + 1 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| Meta-Llama-3.1-70B-Instruct-Turbo | ```python if popcount(mask) <= k: result = max(result, curr+1) else: result = max(result, curr) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| DeepSeek-Coder-V2-Lite-Instruct | ```python if popcount(mask) <= k: result = max(result, curr + 1) else: result = max(result, curr) # Check if changing one character can increase the number of partitions for i in range(len(s)): for c in range(26): if (left_mask[i] & (1 << c)) == 0 and (right_mask[i+1] & (1 << c)) == 0: curr = left[i] + right[i+1] + 1 mask = left_mask[i] | right_mask[i+1] | (1 << c) if popcount(mask) <= k: result = max(result, curr) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| Qwen2-72B-Instruct | ```python if popcount(mask) <= k: result = max(result, curr) # Try changing the current character and see if it improves the result for j in range(26): new_mask = mask ^ (1 << (ord(s[i]) - ord('a'))) | (1 << j) if popcount(new_mask) <= k: result = max(result, curr) return result + 1 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| baichuan4 | ```python if popcount(mask) <= k: result = max(result, curr) else: for j in range(26): if (mask >> j) & 1 == 0: new_mask = mask | (1 << j) if popcount(new_mask) <= k: result = max(result, curr + 1) break return result + 1 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| doubao | ```python if popcount(mask) <= k: result = max(result, curr + 1) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| gpto1 | ```python result = left[len(s)] for i in range(len(s)): for c in range(26): ch = chr(ord('a') + c) if ch == s[i]: continue delta = 0 temp_left_mask = left_mask[i+1] ^ (1<<(ord(s[i])-ord('a'))) | (1<<(ord(ch)-ord('a'))) if popcount(temp_left_mask) > k and popcount(left_mask[i+1]) <= k: delta += 1 elif popcount(temp_left_mask) <= k and popcount(left_mask[i+1]) > k: delta -= 1 temp_right_mask = right_mask[i] ^ (1<<(ord(s[i])-ord('a'))) | (1<<(ord(ch)-ord('a'))) if popcount(temp_right_mask) > k and popcount(right_mask[i]) <= k: delta +=1 elif popcount(temp_right_mask) <= k and popcount(right_mask[i]) > k: delta -=1 total_partitions = left[i] + right[i+1] + delta result = max(result, total_partitions) return result ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| kimi | ```python for j in range(26): if mask & (1<<j) == 0: mask |= 1<<j if popcount(mask) <= k: curr = max(curr, left[i]+right[i+1]+1) mask &= ~(1<<j) result = max(result, curr) ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| minimax | ```python if popcount(mask) <= k: result = max(result, curr) return result # Example usage: # sol = Solution() # print(sol.maxPartitionsAfterOperations("accca", 2)) # Output: 3 # print(sol.maxPartitionsAfterOperations("aabaab", 3)) # Output: 1 # print(sol.maxPartitionsAfterOperations("xxyz", 1)) # Output: 4 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| wenxinyiyan | ```python if popcount(mask) <= k: curr += 1 result = max(result, curr) for c in range(ord('a'), ord('z')+1): if popcount(left_mask[-1]|(1<<(c-ord('a')))) <= k: result = max(result, left[-1]+1) if popcount(right_mask[0]|(1<<(c-ord('a')))) <= k: result = max(result, right[-1]+1) for i in range(len(s)-1): if (1<<(ord(s[i])-ord('a'))) & (1<<(c-ord('a'))): continue mask = left_mask[i]|(1<<(c-ord('a')))|right_mask[i+1] if popcount(mask) <= k: result = max(result, left[i]+right[i+1]+1) return result ``` This code completes the `maxPartitionsAfterOperations` function by iterating over each character in the string `s` and considering the possibility of changing it to another lowercase English letter. It checks if the number of distinct characters in the prefix and suffix after the change is still within the limit `k`, and updates the `result` variable accordingly. Note that the `popcount` function is used to count the number of set bits in a bitmask, which represents the distinct characters in a given prefix or suffix. The `left` and `right` arrays store the cumulative counts of partitions for each prefix and suffix, respectively, while the `left_mask` and `right_mask` arrays store the corresponding bitmasks. The final result is the maximum number of partitions found after considering all possible changes. |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| zhipu | ``` if popcount(mask) <= k: result = max(result, curr) else: for j in range(26): new_mask = mask & ~(1 << j) if popcount(new_mask) <= k: result = max(result, curr) break return result + 1 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |
| deepseek-v3 | ```python if popcount(mask) <= k: curr += 1 else: curr_char = s[i] for c in 'abcdefghijklmnopqrstuvwxyz': new_mask = mask if c != curr_char: new_mask ^= 1 << (ord(curr_char) - ord('a')) new_mask |= 1 << (ord(c) - ord('a')) if popcount(new_mask) <= k: curr += 1 break result = max(result, curr) return result + 1 ``` |
class Solution(object): def maxPartitionsAfterOperations(self, s, k): """ :type s: str :type k: int :rtype: int """ def popcount(n): n = (n & 0x55555555) + ((n >> 1) & 0x55555555) n = (n & 0x33333333) + ((n >> 2) & 0x33333333) n = (n & 0x0F0F0F0F) + ((n >> 4) & 0x0F0F0F0F) n = (n & 0x00FF00FF) + ((n >> 8) & 0x00FF00FF) n = (n & 0x0000FFFF) + ((n >> 16) & 0x0000FFFF) return n left = [0]*(len(s)+1) left_mask = [0]*(len(s)+1) cnt = mask = 0 for i in range(len(s)): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) left[i+1] = cnt left_mask[i+1] = mask right = [0]*(len(s)+1) right_mask = [0]*(len(s)+1) cnt = mask = 0 for i in reversed(range(len(s))): mask |= 1<<(ord(s[i])-ord('a')) if popcount(mask) > k: cnt += 1 mask = 1<<(ord(s[i])-ord('a')) right[i] = cnt right_mask[i] = mask result = 0 for i in range(len(s)): curr = left[i]+right[i+1] mask = left_mask[i]|right_mask[i+1] if popcount(left_mask[i]) == popcount(right_mask[i+1]) == k and popcount(mask) != 26: curr += 3 elif popcount(mask)+int(popcount(mask) != 26) > k: # test case: s = "abcdefghijklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz", k = 26 curr += 2 else: curr += 1 result = max(result, curr) return result |