题目描述
给定一个只包含小写字母字符串,每次可以选择两个相同的字符删除,并在字符串结尾新增任意一个小写字母。
请问最少多少次操作后,所有的字母都不相同?
字符串长度<1e3
输入描述
abab
输出描述
2
解释:
第一次把2个a变成f,第二次把2个b变成b。得到fb,每个字母都不相同,最少操作次数为2。
count计算还有多少个字母没用
map计算26个字母的使用情况
class TechGuide {
public int minOperations(String str) {
// write code here
char[] arr = str.toCharArray();
int[] map = new int[128];
int n = arr.length;
int count = 26;
for (int i = 0; i < n; i++) {
if (map[arr[i] - 'a'] == 0) {
count--;
}
map[arr[i] - 'a']++;
}
int res = 0;
for (int i = 'a'; i <= 'z'; i++) {
if (map[i - 'a'] >= 2) {
while (count > 0 && map[i - 'a'] > 2) {
map[i - 'a'] -= 2;
count--;
res++;
}
}
}
if (count > 0) {
for (int i = 0; i < 128; i++) {
res += (map[i]) / 2;
}
} else {
for (int i = 0; i < 128; i++) {
if (map[i] != 0) {
res += map[i] - 1;
}
}
}
return res;
}