UVA 11988 Broken Keyboard (Beiju Text)
阿新 • • 發佈:2019-02-02
題目:
首先,括號對前面的字串的輸出是無法分割的。
也就是說,括號右邊的字元只能輸出到前面這個字串的2邊。
這個和算術表示式裡面的小括號是很像的,小括號是封閉的,括號外面的內容無法影響裡面的內容。
所以,這個題目可以模擬算術表示式,找到唯一的核心分割點,比如a*b-c+d中的+,又比如a*b-c*d中的-
找到之後,遞迴即可。
程式碼:
#include<iostream>
#include<string>
#include<string.h>
#include<stack>
using namespace std;
stack<int >s;
char c[100005];
void f(int high)
{
if (s.empty())
{
for (int i = 0; i <= high; i++)printf("%c", c[i]);
return;
}
int key = s.top();
s.pop();
if (c[key] == ']')
{
f(key - 1);
for (int i = key + 1; i <= high; i++)printf("%c", c[i]);
}
else
{
for (int i = key + 1; i <= high; i++)printf("%c", c[i]);
f(key - 1);
}
}
int main()
{
stringstr;
int l;
while (scanf("%s", c) != EOF)
{
l = strlen(c);
while (!s.empty())s.pop();
for (int i = 0; i < l; i++)if (c[i] == '[' || c[i] == ']')s.push(i);
f(l-1);
cout << endl;
}
return 0;
}