首页 / C# / c# – 我读平衡括号挑战错了吗?
c# – 我读平衡括号挑战错了吗?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 我读平衡括号挑战错了吗?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1513字,纯文字阅读大概需要3分钟。
内容图文
![c# – 我读平衡括号挑战错了吗?](/upload/InfoBanner/zyjiaocheng/820/c0f1134de5074af3a18077338feca0c0.jpg)
我正在做平衡括号问题(https://www.hackerrank.com/challenges/balanced-brackets),我无法弄清楚我哪里出错了.
例如
3
{[()]}
{[(])}
{{[[(())]]}}
– >
YES
NO
YES
我认为这个字符串包含平衡括号是一个直截了当的事实,当且仅当每一对s [i],s [ni-1]确实s [i]是一个右向括号并且s [ni] -1]是相应的左向括号.
因此我的解决方案
static readonly Dictionary<char,char> brackets = new Dictionary<char,char>()
{
{ '{', '}' },
{ '[', ']' },
{ '(', ')' }
};
static bool IsBalanced(string str)
{
for(int i = 0, j = str.Length - 1; i < j; ++i, --j)
if(!brackets.ContainsKey(str[i]) || brackets[str[i]] != str[j])
return false;
return true;
}
由于某种原因失败了.
解决方法:
典型的实现基于堆栈:
>推开任何开口[,{,(支架到堆栈
>关闭],},)括号,尝试弹出顶部项目并检查它是否对应于当前结束括号:( to)等.如果堆栈为空或没有对应关系,则返回false.
>最后,在处理完最后一个字符后,堆栈应该为空.
执行:
private static Dictionary<char, char> openByClose = new Dictionary<char, char>() {
{ '}', '{' },
{ ']', '[' },
{ ')', '(' },
};
private static bool IsBalanced(string source) {
if (string.IsNullOrEmpty(source))
return true;
Stack<char> brackets = new Stack<char>();
foreach (char ch in source) {
char open;
if (openByClose.Values.Contains(ch)) // ch is an opening bracket
brackets.Push(ch);
else if (openByClose.TryGetValue(ch, out open)) // ch is a closing bracket
if (!brackets.Any())
return false; // too many closing brackets, e.g. "())"
else if (brackets.Pop() != open)
return false; // brackets don't correspond, e.g. "(]"
}
return !brackets.Any(); // too many opening brackets, e.g. "(()"
}
内容总结
以上是互联网集市为您收集整理的c# – 我读平衡括号挑战错了吗?全部内容,希望文章能够帮你解决c# – 我读平衡括号挑战错了吗?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。