1.
字符串操作
给定一个只包含小写字母字符串,每次可以选择两个相同的字符删除,并在字符串结尾新增任意一个小写字母。
请问最少多少次操作后,所有的字母都不相同?
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 256M,其他语言512M
示例1
输入例子:
"abab"
输出例子:
2
例子说明:
第一次操作将两个'a'变成一个'f',字符串变成"bbf"。
第二次操作将两个'b'变成一个'b',字符串变成"fb"。
操作方式不是唯一的,但可以证明,最少操作次数为2。
代码:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 返回满足题意的最小操作数
* @param str string字符串 给定字符串
* @return int整型
*/
function minOperations(str) {
// write code here
let string = str.split("");
let i, j, n;
n = 0;
let length = string.length;
let arr = [];
for (i = 0; i < length; i++) {
for (j = i + 1; j < length; j++) {
if (string[i] == string[j]) {
console.log("前", string);
string.splice(j, 1);
string.splice(i, 1);
i--;
length = length - 1;
arr = find(string);
let k;
for (k = 0; k < arr.length; k++) {
if (arr[k] == false) {
string.push(String.fromCharCode(k + 97));
n++;
console.log("后", string);
break;
}
}
if (k == arr.length) {
string.push(String.fromCharCode(0 + 97));
n++;
console.log("后", string);
}
}
}
}
return n;
}
function find(string) {
let i, j;
let array = [];
for (i = 0; i < 26; i++) {
array[i] = false;
}
for (i = 0; i < string.length; i++) {
array[string[i].charCodeAt(0) - 97] = true;
}
return array;
}
module.exports = {
minOperations: minOperations,
};