我有一个简单的问题,
鉴于字符串“(”和“)”的圆括号,我们加上最少的括号(“(”或“)”,并且在任何位置),这样得出的括号字符串才有效。
形式上,括号字符串在以下情况下才有效: 它是空字符串,或者可以写为AB(与B串联的A),其中A和B是有效字符串,或者可以写为(A), 其中A是有效字符串。给定一个括号字符串,返回最小括号,我们必须添加该括号才能使结果字符串有效。
这是我在JS中的解决方案,
const minAddToMakeValid = S => {
const stack = [];
let count = 0;
S.map(c => {
if(c === '('){
stack.push(c);
}
else if(c === ')' && stack[stack.length -1] === '('){
stack.pop();
}
else{
count ++;
}
});
return count + stack.length;
};
const S = "())";
console.log(minAddToMakeValid(S));
出现以下错误,
TypeError: S.map is not a function
at minAddToMakeValid (/Users/melissa/Dropbox/js/leetcode-js/bin/921_minAddToMakeParanthesisValid.js:4:7)
at Object.<anonymous> (/Users/melissa/Dropbox/js/leetcode-js/bin/921_minAddToMakeParanthesisValid.js:19:13)
at Module._compile (internal/modules/cjs/loader.js:721:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:732:10)
at Module.load (internal/modules/cjs/loader.js:620:32)
at tryModuleLoad (internal/modules/cjs/loader.js:560:12)
at Function.Module._load (internal/modules/cjs/loader.js:552:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:774:12)
at executeUserCode (internal/bootstrap/node.js:342:17)
at startExecution (internal/bootstrap/node.js:276:5)
答案 0 :(得分:3)
String
不是Array
:它没有相同的方法。
但是,您可以使用S.split("")
获取一个数组,然后在其上map
答案 1 :(得分:2)
S是一个字符串,而不是数组。这就是为什么您无法映射它的原因。
[... S] .map()应该可以工作。
...
是传播算子。它将需要迭代(例如字符串或数组)将其散布为参数。通过将其放置在数组括号内,它将创建一个新数组,其中填充了您所“传播”的内容。
const s = 'test';
const arr = [...s]; // = ['t', 'e', 's', 't']
const S = 'demo string';
[...S].map((char)=>{
console.log(char);
})
答案 2 :(得分:0)
public int minAddToMakeValid(String S){
int output = 0;
int open = 0;
char[] sArr = S.toCharArray();
for(char i=0; i < sArr.length; i++){
if(sArr[i] == '('){
output++;
open++;
if((i+1 < sArr.length) && sArr[i+1] == ')'){
output--;
open--;
}
else if((i+1 < sArr.length) && sArr[i+1] == '('){
output++;
open++;
}
i = (char)(((i-'0')+1) + '0');
}
else if(sArr[i] == ')'){
if(open < 1){
output++;
}else{
output--;
open--;
}
if((i+1 < sArr.length) && sArr[i+1] == ')' && open < 1){
output++;
i = (char)(((i-'0')+1) + '0');
}
else if((i+1 < sArr.length) && sArr[i+1] == ')' && open > 0){
output--;
open--;
i = (char)(((i-'0')+1) + '0');
}
else if((i+1 < sArr.length) && sArr[i+1] == '('){
output++;
open++;
i = (char)(((i-'0')+1) + '0');
}
}
}
return Math.abs(output);
}