给定一个只包括 '(',')','{','}','[',']' 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
示例 1:
输入:s = "()"
输出:true
示例2:
输入:s = "()[]{}"
输出:true
示例3:
输入:s = "(]"
输出:false
示例4:
输入:s = "([)]"
输出:false
示例5:
输入:s = "{[]}"
输出:true
解题思路:
首先我们根据示例分析一定不可能是有效字符串的字符串(1)长度为0或1的字符串(2)长度为奇数的字符串
其次我们进一步分析符合上述两点的其他字符串是否有效。通过栈的方法判断最为简单有效。
凡是遇到左括号进栈,遇到右括号出栈,看最后栈是否为空,如果为空,返回true否则返回false
解题代码:
class Solution {
public:
bool isValid(string s) {
int n=s.size();
if(n%2==1)
return false;
stack<char>st;
for(int i=0;i<n;i++)
{
if(s[i]=='('|s[i]=='['||s[i]=='{')
{
st.push(s[i]);
}
else
{
if (st.empty())
return false;
else{
if(s[i]==')'&&st.top()=='(')
st.pop();
else if(s[i]==']'&&st.top()=='[')
st.pop();
else if(s[i]=='}'&&st.top()=='{')
st.pop();
else
return false;
}
}
}
return st.empty();
}
};
文章代码仅提供思路使用,未曾优化,仅供参考!
该博客讨论了如何判断给定的括号字符串是否有效,主要涉及编程问题。通过分析示例,排除无效字符串的特征,并提出使用栈的数据结构进行有效性的检查。当遇到左括号时将其压入栈中,遇到右括号则尝试与栈顶的左括号匹配,最后检查栈是否为空来确定字符串的有效性。提供的代码实现了这个解决方案,但未进行优化。
1503

被折叠的 条评论
为什么被折叠?



