我今天试图解决一个挑战但我做不到。我必须确保字符串的所有大括号都以正确的顺序关闭。
例如,这些是正确的:
{[()]}
{}()[]
{((()))}[]
这些不会:
{[}]
{{)}
我考虑过使用正则表达式,我不能,任何人都可以展示如何做到这一点? (正则表达式或其他方式)。
为了澄清,我不是试图将内容放在大括号内,内部没有任何内容。
答案 0 :(得分:1)
问题可以通过正则表达式解决,但它不是最快的解决方案。只需删除所有[]
,{}
和()
,直到字符串不再缩小为止。如果它的长度为0,则表达式是正确的(下面的正则表达式另外允许空格):
document.body.innerHTML = parse('{((()))}[]');
function parse(s) {
let t;
do {
t = s;
s = s.replace(/ *(\{ *\}|\( *\)|\[ *\]) */g, "");
} while (t.length != s.length);
return s.length == 0;
}
答案 1 :(得分:0)
这可以通过使用LIFO stack一次通过字符串来解决。循环遍历字符串,并在每个字符处执行以下操作:
一旦你到达字符串的末尾,只需检查堆栈中的元素数量。
C#中的示例实现(没有非支撑字符的错误处理):
public static bool IsMatched(string braces)
{
const string openBraces = "([{";
const string closeBraces = ")]}";
Stack<char> stack = new Stack<char>();
foreach (char c in braces)
{
if (openBraces.Contains(c))
{
stack.Push(c);
}
else if (stack.Count == 0 || openBraces.IndexOf(stack.Pop()) != closeBraces.IndexOf(c))
{
return false;
}
}
return stack.Count == 0;
}