задача пары скобок в javascript
пример скобок [] () || 77 88 23 54 <>, надо в строке посмотреть совпадают ли все пары. Есть решение через стек. Просто когда скобки одинаковые то он не видит закрывающую, если смотрю через стек и добавляю открывающие, не догоняю как добавить проверку что при четных еще и последняя в стеке такая же
function check(str, bracketsConfig) {
let brackets = bracketsConfig.join('').replace(/,/g, '');
let stack = [];
for (let bracket of str) {
let bracketsIndex = brackets.indexOf(bracket)
if (bracketsIndex % 2 === 0) {
stack.push(bracketsIndex)
if (bracket === brackets[bracketsIndex+1]){
stack.pop();
}
}
else {
if (stack.pop() !== bracketsIndex-1){
return false;
}
}
}
return stack.length === 0
}
пример вызова
check('|(|)', [['(', ')'], ['|', '|']])
check('5555512575557777777555566667888888667661133833448441111222233333444442266666' , [['1', '2'], ['3', '4'], ['5', '6'], ['7', '7'], ['8', '8']])
check('((()))()',[['(', ')']])
Ответы (2 шт):
Автор решения: костя черникович
→ Ссылка
function check(str, bracketsConfig) {
let brackets = bracketsConfig.join('').replace(/,/g, '');
let stack = [];
for (let bracket of str) {
let bracketsIndex = brackets.indexOf(bracket)
if (bracketsIndex % 2 === 0) {
if (bracket === brackets[bracketsIndex + 1] && stack[stack.length - 1] === bracketsIndex){
stack.pop();
} else if (bracket === brackets[bracketsIndex + 1] && stack[stack.length - 1] !== bracketsIndex) {
stack.push(bracketsIndex)
}
else{
stack.push(bracketsIndex)
}
}
else {
if (stack.pop() !== bracketsIndex-1){
return false;
}
}
}
return stack.length === 0
}
вот оно решение, хотя б у меня работает, проверка на пары скобок если есть скобки одинаковые || 77 88 и тд все не догонял как сделать проверку что б если скобки одинаковые разделить их
Автор решения: eccs0103
→ Ссылка
Упрощаем вашу задачу с помощью встроенных функций:
function check(string, brackets) {
const pairs = new Map(brackets); // Создаем коллекцию из пар скобок для удобного поиска.
const stack = []; // Создаем пустой стек
for (const char of string) { // Цикл, который проходит через всю строку
if (pairs.get(stack.at(-1)) == char) { // Если пара последнего символа в стеке тот же что и в строке на данный момент
stack.pop(); // удаляем его из стека
} else { // во всех других случаях
stack.push(char); // добавляем в конец стека
}
}
return stack.length == 0; // В конце проверяем пустой ли у нас стек
}
console.log(check('|(|)', [['(', ')'], ['|', '|']]));
console.log(check('5555512575557777777555566667888888667661133833448441111222233333444442266666', [['1', '2'], ['3', '4'], ['5', '6'], ['7', '7'], ['8', '8']]));
console.log(check('((()))()', [['(', ')']]));