我正在尝试完成一些编码挑战。我在弄清楚解决此挑战的逻辑时遇到了麻烦。我正在使用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的右括号。
答案 0 :(得分:2)
有一个叫做括号匹配问题的简单版本,您需要做更多的工作才能找到相应的索引。 首先,您将需要一个堆栈来推动开括号索引,如果找到任何封闭的索引,则弹出堆栈成员之一,如下所示:
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;