Найти в Дзене
Skill Up In IT

20. Valid Parentheses

Дана строка, s содержащая только символы '(', ')', '{', '}', '['и ']', определите, является ли входная строка допустимой. Входная строка действительна, если: Example 1: Input: s = "()" Output: true Example 2: Input: s = "()[]{}" Output: true Example 3: Input: s = "(]" Output: false Example 4: Input: s = "([])" Output: true Ограничения: пример решения на Go:
func isValid(s string) bool { var notChange bool var countPrev,countNext int for !notChange { nextCheck: for i, r := range s { if i < len(s)-1 { if check(r, rune(s[i+1])) { if len(s) == 2 { return true } s = s[:i]+s[i+2:] goto nextCheck } } } countNext = len(s) if countNext == 0 { return true } if countNext == countPrev  { notChange = true break } countPrev = countNext } return len(s) == 0 } var list = map[rune]rune{ ')': '(', ']': '[', '}': '{', } func check(prev, next rune)bool{ return  prev == list[next] }
Данный вариант подразумевает при каждом нахождении замыканий убирать их и проходить по оставшим

Дана строка, s содержащая только символы '(', ')', '{', '}', '['и ']', определите, является ли входная строка допустимой.

Входная строка действительна, если:

  1. Открытые скобки должны быть закрыты скобками того же типа.
  2. Открытые скобки должны быть закрыты в правильном порядке.
  3. Каждой закрывающейся скобке соответствует открывающаяся скобка того же типа.

Example 1:

Input: s = "()"
Output: true

Example 2:

Input: s = "()[]{}"
Output: true

Example 3:

Input: s = "(]"
Output: false

Example 4:

Input: s = "([])"
Output: true

Ограничения:

  • 1 <= s.length <= 104
  • s состоит только из скобок '()[]{}'.

пример решения на Go:



func isValid(s string) bool {
var notChange bool
var countPrev,countNext int
for !notChange {
nextCheck:
for i, r := range s {
if i < len(s)-1 {
if check(r, rune(s[i+1])) {
if len(s) == 2 {
return true
}
s = s[:i]+s[i+2:]
goto nextCheck
}
}
}
countNext = len(s)
if countNext == 0 {
return true
}
if countNext == countPrev  {
notChange = true
break
}
countPrev = countNext
}
return len(s) == 0
}
var list = map[rune]rune{
')': '(',
']': '[',
'}': '{',
}
func check(prev, next rune)bool{
return  prev == list[next]
}

Данный вариант подразумевает при каждом нахождении замыканий убирать их и проходить по оставшимся значениям, эффективнее конечно сделать через стек .