ios - 在 Swift 中检查表达式中的平衡括号
问题描述
我试图用 swift 编写这个,因为我找不到任何用 swift 编写的解决方案,但似乎在这个实现中遇到了障碍。在弹出和推送功能上,我不确定是否Character
是正确的返回/参数。
class BalancedParam {
struct stack {
var top = -1
var items = [Character]()
mutating func push(_ x: Character) {
items.append(x)
if top == 99 {
print("Stack full")
} else {
top += 1
items[top] = x
}
}
mutating func pop() -> Character {
if top == -1 {
print("Underflow error")
return "0"
} else {
let element = items[top]
top -= 1
return element
}
}
mutating func isEmpty() -> Bool {
return (top == -1) ? true : false
}
}
static func isMatchingPair(_ character1: Character, _ character2: Character) -> Bool {
if character1 == "(" && character2 == ")" {
return true
} else if character1 == "{" && character2 == "}" {
return true
} else if character1 == "[" && character2 == "]" {
return true
} else {
return false
}
}
static func areParenthesisBalanced(_ exp: [Character]) -> Bool {
// Declare an empty character stack
var st = stack()
for i in 0..<exp.count {
if exp[i] == "{" || exp[i] == "(" || exp[i] == "[" {
st.push(exp[i])
}
if exp[i] == "}" || exp[i] == ")" || exp[i] == "]" {
if st.isEmpty() {
return false
} else if !isMatchingPair(st.pop(), exp[i] ) {
return false
}
}
}
if st.isEmpty() {
return true //balanced
} else {
//not balanced
return false
}
}
}
let exp: [Character] = ["{", "(", ")", "}", "[", "]"]
if BalancedParam.areParenthesisBalanced(exp) {
print("Balanced ")
} else {
print("Not Balanced ")
}
我将不胜感激任何帮助理解我做错了什么。谢谢
解决方案
您不能分配给空数组,即,如果数组大小或更大items[top] = x
,您只能使用此语法top+1
所以这不行
var arr = [Int]()
arr[0] = 1
但这是
var arr = [Int]()
arr.append(0)
arr[0] = 1
由于您对数组大小有上限,因此另一个选择是初始化该大小的数组,然后继续使用原始语法
var arr = Array(repeating: 0, count: 99)
arr[0] = 1
推荐阅读
- javascript - Vue 不读取 API
- javascript - 如何使用 cypress 存根 contentwindow.print/使用 cypress 测试 printJS
- csv - 如何对 CSV 文件进行排序
- ruby-on-rails - 错误 - 找不到 'id'=2 的用户 - 无法解决
- python - 如果破折号在字符串内 n 次,则正则表达式匹配
- office365 - docx4j - VariablePrepare.prepare() 中的 NullPointerException
- centos - 允许某些 IP 的端口 IPTABLES
- ruby-on-rails - 在 ActiveStorage 中保存之前获取文件名 - Rails 5.2.1
- python - conda虚拟环境使用的python版本错误?
- javascript - 如何修复 ChangeDetectorRef 导入错误:没有 ChangeDetectorRef 提供程序