c# - 无法弄清楚解决这一挑战的逻辑
问题描述
我正在尝试完成一些编码挑战。我无法弄清楚解决这一挑战的逻辑。我正在使用 C#。
挑战在于:
我们得到一个名为的字符串para = "((()())";
,里面是一堆括号。我们还给出了一个index = 1
索引始终是字符串中以 开头的值(
。因此,如果我们转换我们的para.ToCharArray
, 我们的index 1 would = '('
.
有了代码,我已经非常接近解决它了,但我无法理解它。
下面是我的代码,复制和粘贴应该可以正常工作。
string para = "((())())";
char[] charPara = para.ToCharArray();
int charParaCount = charPara.Length;
int index = 1;
for (int i = index; i < charParaCount; i++)
{
if(charPara[index] == '(' && charPara[i] == ')' && charPara[i-1] != '(')
{
Debug.WriteLine("index is: " + index + " and i is: " + i);
}
}
现在,所需的结果应该是WriteLine
具有正确相关括号索引的结果。在我们上面的例子中index = 1
,我们确实找到了它,4
但我们也得到了最后一个括号索引,即7
.
我被困在如何从逻辑上解决这个问题上,任何建议都将不胜感激。
输入输出示例:
我们的输入字符串是string para = "((())())";
,我们的输入 int 是int index = 1;
。对此的预期输出将是位置4
,因为在 char 数组中,4
它将是索引 1 的右括号。
解决方案
有一个更简单的版本称为括号匹配问题,您需要做更多的工作才能找到相应的索引。首先,你需要一个堆栈来推开括号索引,如果你找到任何关闭的,弹出堆栈的成员之一,像这样:
string para = "((())())";
char[] charPara = para.ToCharArray();
int charParaCount = charPara.Length;
Stack<int> myStack = new Stack<int>();
int index = 1;
for (int i = 0; i < charParaCount; i++)
{
if(charPara[i]=='(')
myStack.Push(i);
else if(charPara[i]==')'){
if(myStack.Pop()==index)//if poped index is what we looking for "==index", currently proccesing index "i" will be corresponding parenthesis to it
return i;
}
}
记得也using System.Collections.Generic;
用
推荐阅读
- amazon-web-services - Apache metrics to cloudwatch via Prometheus
- ansys - 从 ANSYS 中提取质量和刚度矩阵
- javascript - 如何循环一个函数两次以上?
- python - 用scrapy刮问题
- csv - 如何在 Svelte 应用程序中使用 Axios 获取 CSV?
- mysql - Google App Script SQL 查询返回 bool 'True' 而不是 Int 值,但查询在 App Script 之外工作?
- flutter - 令人敬畏的 fcm 推送通知
- c# - 如何在不应对的情况下重用 XAML 组件及其“.cs”代码?
- python - 每次循环重新启动时,如何防止 for 循环擦除它的输出?
- python-3.x - 禁用 Matplotlib 图表的恒定位置重置