Loading...
Nikolamv95 avatar Nikolamv95 4 Точки

Balanced Parentheses - C# Advanced

Здравейте задачата е Balanced Parentheses от C# Advanced. Дава ми 87 точки и ми се чупи последния тест. Предполагам теста който ми се чупи е (){([])}, но не мога да измисля как да си променя кода. Може ли някой да ми даде насока какво да направя?

https://pastebin.com/B5AQszAM

Given a sequence consisting of parentheses, determine whether the expression is balanced. A sequence of parentheses is balanced if every open parenthesis can be paired uniquely with a closed parenthesis that occurs after the former. Also, the interval between them must be balanced. You will be given three types of parentheses: (, {, and [.

{[()]} - This is a balanced parenthesis.

{[(])} - This is not a balanced parenthesis.

Input

  • Each input consists of a single line, the sequence of parentheses.

Output

  • For each test case, print on a new line "YES" if the parentheses are balanced.
    Otherwise, print "NO". Do not print the quotes.

Constraints

  • 1 ≤ lens ≤ 1000, where lens is the length of the sequence.
  • Each character of the sequence will be one of {, }, (, ), [, ].

Examples

Input

Output

{[()]}

YES

{[(])}

NO

{{[[(())]]}}

YES

Тагове:
1
C# Advanced
Elena123456 avatar Elena123456 235 Точки

Здравейте,

не успях да открия защо се чупи последния тест, но въпреки това имам желание да помогна. Мога да Ви предложа моето решение с един стек, тъй като логиката никак не е сложна: https://pastebin.com/xwTAqACY

В един forech проверявам кой е текущия символ- ако е някоя от трите отварящи скоби ( currentSymbol == '{' || currentSymbol == '(' || currentSymbol == '[') , то го слагам в стек. Ако currentSymbol е някоя от затварящите скоби( currentSymbol == '}' || currentSymbol == ')' || currentSymbol == ']'),  не го слагам в стека, а  се опитвам да Peek() стека с отворените скоби и да видя дали си съвпадат последната отваряща скоба в него с намерената текуща затваряща. Ако си съвпадат, просто ще извадя последната отваряща скоба в стека и ще продължа, но ако не си съвпадат ще изпиша "NO" и ще прекъсна програмата.  Като вече ще имаме няколко проверки за да проверим за съвпадение:

                  if (lastSymbolInTheStack == '{' && currentSymbol =='}')
                    {
                        stackOpenParentheses.Pop();                                             
                    }

                    else if (lastSymbolInTheStack == '(' && currentSymbol == ')')
                    {
                        stackOpenParentheses.Pop();                       
                    }

                    else if (lastSymbolInTheStack == '[' && currentSymbol == ']')
                    {
                        stackOpenParentheses.Pop();                       
                    }

                    else
                    {
                        Console.WriteLine("NO");
                        return;
                    }

След успешно извъртане на forech със символите,  най-накрая изписвам "YES".

Ако не сте успели да си откриете грешката и не Ви задоволява моето решение, дано да се опита да Ви помогне и някой друг.

Поздрави и  Весела Коледа! smiley

 

            

 

1
24/12/2020 23:11:02
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.