Не могу понять логику, чтобы решить эту проблему - PullRequest
0 голосов
/ 06 ноября 2019

Я пытаюсь выполнить несколько задач по кодированию. У меня проблемы с выяснением логики решения этой проблемы. Я использую 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 Ответ

2 голосов
/ 06 ноября 2019

Существует более простая версия, называемая проблемой соответствия скобок, вам нужно немного поработать, чтобы найти соответствующие индексы. во-первых, вам понадобится стек для вставки индекса открытых скобок, если вы найдете какой-нибудь закрывающий, вставьте одного из членов стека, например:

  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; тоже

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...