Ruby:如何确定一系列的圆括号/花括号/方括号是否有效?
我刚刚得到了这个字符串数组:Ruby:如何确定一系列的圆括号/花括号/方括号是否有效?,ruby,Ruby,我刚刚得到了这个字符串数组: expressions = [ ")(){}", "[]({})", "([])", "{()[]}", "([)]" ] 我应该编写一个函数,为每个无效字符串打印0,为每个有效字符串打印1。因此,这个函数的输出作为一个参数被给定为expressions,即01,1,1,0 我该怎么做 def check_braces(expressions) # ?? end ==更新== 根据彼得的暗示,我想出了一个答案: expressions = [ ")(){}"
expressions = [ ")(){}", "[]({})", "([])", "{()[]}", "([)]" ]
我应该编写一个函数,为每个无效字符串打印0,为每个有效字符串打印1。因此,这个函数的输出作为一个参数被给定为expressions
,即01,1,1,0
我该怎么做
def check_braces(expressions)
# ??
end
==更新==
根据彼得的暗示,我想出了一个答案:
expressions = [ ")(){}", "[]({})", "([])", "{()[]}", "([)]" ]
# expressions = [ "[]({})" ]
def check_braces(expressions)
matchers = {
"{" => "}",
"[" => "]",
"(" => ")"
}
expressions.each do |expression|
elements = []
expression.chars.each do |char|
elements << char if elements.empty?
last_element = elements[-1]
if char == matchers[last_element]
elements.pop
end
end
puts (elements.empty? ? 1 : 0)
end
end
check_braces(expressions)
#0
#1
#1
#1
#0
expressions=[”)({}“,“[”({})”,“([]),“{()[]),“([)]”
#表达式=[“[]({})”]
def check_大括号(表达式)
匹配器={
"{" => "}",
"[" => "]",
"(" => ")"
}
表达式。每个do |表达式|
元素=[]
expression.chars.each do| char|
元素这里是基本思想,我将把实现留给您。对于每个字符串
循环通过它的字符李>
当您看到一个{[(
)时,将其放入堆栈(Ruby数组可以作为堆栈使用)
当您看到一个}]
时,请查看数组中的最后一个字符,并查看它是否匹配(例如,数组中的最后一个元素是[
,您有一个]
,这就是匹配)。如果匹配,则弹出数组中的最后一个元素;每当您看到一个不匹配时,字符串就坏了,您可以停止循环
代码的一个潜在问题是,它无法捕获类似以下内容的内容:“[]({)”
如果添加elsif检查当前字符是否已在元素数组中,如果未在元素数组中,则将其打开,这将解决此问题:
if char == matchers[last_element]
elements.pop
elsif !elements.include? char
elements << char
end
if char==matchers[最后一个元素]
流行元素
elsif!elements.include?char
元素遇到了这样一种情况:它不起作用{([)]}
,我将其附加到表达式数组的末尾
这是我的解决方案,我把它缩短了一点
expressions = [ ")(){}", "[]({})", "([])", "{()[]}", "([)]", "{([)]}" ]
def check_braces(exps)
m = { "{" => "}", "[" => "]", "(" => ")" }
exps.each do |ex|
el = []
ex.chars.each do |char|
char == m[el[-1]] ? el.pop : el.push(char)
end
puts (el.empty? ? 1 : 0)
end
end
check_braces(expressions)
什么构成有效字符串?@Linuxios他正在寻找匹配的开始括号和结束括号。因此()
在[(])中有效
无效,因为闭包不匹配。很好,我明白了!我会试试看。我在这个问题上花了一个小时,但没有找到答案。经过您的解释,我花了2分钟才弄明白。谢谢!