ybt1355 字串匹配問題

2021-08-18 21:29:24 字數 1302 閱讀 4431

時空限制    1000ms/64mb

字串中只含有括號 (),,<>,{},判斷輸入的字串中括號是否匹配。如果括號有互相包含的形式,從內到外必須是<>,(),,{},例如。輸入: [()] 輸出:yes,而輸入(), ()都應該輸出no。

檔案的第一行為乙個整數n,表示以下有多少個由括好組成的字串。接下來的n行,每行都是乙個由括號組成的長度不超過255的字串。

在輸出檔案中有n行,每行都是yes或no。

5

{}{}<><>()()

}}<<>><<>>(())(())

}}<<>><<>>(())(())

<<<>><<>>>((<>))(())[[(<>)]]

><}<<<>><<>>>((<>))(())[[(<>)]]

yes

yesyes

yesno

內到外必須是<>,(),,{},我們給它們定個優先順序,用對映來定優先順序。

1、當某個符號的左闊符時,若果棧空或棧頂符號優先順序小於等於,可以入棧。

2、否者不能入棧,匹配失敗。

3、如果是右闊符時,棧頂非空且棧頂是此時的左括號 sk.top()+4==a[i]  ,匹配成功,出棧。

4、否則匹配失敗。

5、根據匹配標誌,輸出結果。

法一:stl棧

#include#include#includeusing namespace std;

const char f = ',']',')','>'}; //左部分和右部分間隔4

int n,a[300];

int main()

}else

}if (!sk.empty()) cout<<"no\n";

else if (flag) cout<<"yes\n";

else cout<<"no\n";

} return 0;

}

法二:手動棧

#include#includeusing namespace std;

const int n = 300;

const char f = ',']',')','>'}; //左部分和右部分間隔4

int n,a[n],stack[n];

int main()

}else

}if (top) cout<<"no\n";

else if (flag) cout<<"yes\n";

else cout<<"no\n";

} return 0;

}

1355 字串匹配問題 strs

題目描述 字串中只含有括號 判斷輸入的字串中括號是否匹配。如果括號有互相包含的形式,從內到外必須是 例如。輸入 輸出 yes,而輸入 都應該輸出no。輸入 第一行為乙個整數n,表示以下有多少個由括好組成的字串。接下來的n行,每行都是乙個由括號組成的長度不超過255的字串。輸出 在輸出檔案中有n行,每...

1005 字串匹配問題

時間限制 1 sec 記憶體限制 256 mb 提交 315 解決 163 提交 狀態 討論版 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸...

1005字串匹配問題

題目描述 給出乙個字串和多行文字,在這些文字中找到字串出現的那些行。你的程式還需支援大小寫敏感選項 當選項開啟時,表示同乙個字母的大寫和小寫看作不同的字元 當選項關閉時,表示同乙個字母的大寫和小寫看作相同的字元。輸入輸入的第一行包含乙個字串s,由大小寫英文本母組成。第二行包含乙個數字,表示大小寫敏感...