Middle+
// Se ingresa una cadena s que contiene solo los caracteres '(', ')', '[', ']' // Determine si la cadena de entrada es válida. // La cadena es válida si: // - Todos los paréntesis abiertos son cerrados por paréntesis del mismo tipo. // - Los paréntesis deben cerrarse en el orden correcto. // - Cada paréntesis de cierre corresponde a un paréntesis abierto del mismo tipo // () // func isValid(s string) bool { // }
sobes.tech AI
Respuesta de la IA
Для проверки валидности строки со скобками можно использовать стек. Идея в том, что при встрече открывающей скобки мы кладём её в стек, а при встрече закрывающей — проверяем, соответствует ли она последней открытой (верхнему элементу стека). Если нет — строка невалидна. В конце стек должен быть пуст.
Пример на Go:
type stack []rune
func (s *stack) push(r rune) {
*s = append(*s, r)
}
func (s *stack) pop() (rune, bool) {
if len(*s) == 0 {
return ' ', false
}
index := len(*s) - 1
elem := (*s)[index]
*s = (*s)[:index]
return elem, true
}
func isValid(s string) bool {
var st stack
pairs := map[rune]rune{')': '(', ']': '['}
for _, ch := range s {
switch ch {
case '(', '[':
st.push(ch)
case ')', ']':
top, ok := st.pop()
if !ok || pairs[ch] != top {
return false
}
}
}
return len(st) == 0
}