使用字母I和O分别表示PUSH和POP操作。堆栈的初始状态和结束状态都应为空,一个PUSH和POP操作序列仅由I和O组成的序列表示。这种序列只有在具有可操作性时才是合法的,否则就是非法的。写一个算法来判断下列序列是否合法。
时间: 2024-05-22 21:12:25 浏览: 57
判断出栈序列是否合法
1. 初始化一个空栈S。
2. 遍历序列中的每个字符:
- 如果是'I',则将一个元素入栈S。
- 如果是'O',则将栈顶元素弹出,如果此时栈为空,则序列非法,直接返回false。
3. 如果序列遍历完毕后,栈还不为空,则序列非法,直接返回false。
4. 如果序列遍历完毕后,栈为空,则序列合法,返回true。
代码实现:
bool isValid(string s) {
stack<char> st;
for (char c : s) {
if (c == 'I') {
st.push(c);
} else if (c == 'O') {
if (st.empty()) { // 栈为空,序列非法
return false;
}
st.pop();
}
}
return st.empty(); // 栈为空,序列合法;否则序列非法
}
阅读全文