首页 > 解决方案 > 无法弄清楚解决这一挑战的逻辑

问题描述

我正在尝试完成一些编码挑战。我无法弄清楚解决这一挑战的逻辑。我正在使用 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 的右括号。

标签: c#logic

解决方案


有一个更简单的版本称为括号匹配问题,您需要做更多的工作才能找到相应的索引。首先,你需要一个堆栈来推开括号索引,如果你找到任何关闭的,弹出堆栈的成员之一,像这样:

  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;


推荐阅读