题解 | #牛群的秘密通信#
牛群的秘密通信
https://www.nowcoder.com/practice/f0047999594d4cd39f85d7347c6941af
知识点
模拟,数据结构:栈
思路
我们将'[','(','{'称为左半边,剩下的为右半边,分别使用两个stack存储(记作a,b)。
遍历字符串s,将每一位都放入对应的栈中。若为左半边,则放入a中,若为右半边,则放入b中。
每当一位右半边放入b时,都匹配一下是否与a.top()相对,若相对则都弹出,否则说明不匹配,可以直接return false了。否则继续遍历s。只要过程中没有返回FALSE,最后一定可以返回TRUE
##代码c++
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param s string字符串
* @return bool布尔型
*/
bool is_valid_cow_communication(string s) {
// write code here
stack<char>a;
stack<char>b;
for (int i = 0; i < s.size(); i++) {
if (s[i] == '(' || s[i] == '[' || s[i] == '{') {
a.push(s[i]);
}
else {
if ((s[i] == ']' && a.top() == '[' ) || (s[i] == ')' && a.top() == '(') ||(s[i] == '}' && a.top() == '{')) {
a.pop();
//b.pop();
} else return false;
}
}
//cout<<s[i]<<endl;
return true;
}
};