无法弄清楚解决这个挑战的逻辑

时间:2019-11-06 16:35:20

标签: c# logic

我正在尝试完成一些编码挑战。我在弄清楚解决此挑战的逻辑时遇到了麻烦。我正在使用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的右括号。

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;