题目:给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串 s ,判断字符串是否有效。
有效字符串需满足:
左括号必须用相同类型的右括号闭合。
左括号必须以正确的顺序闭合。
题目分析:小二,你想像一串括号,现在让你来判断这一串括号是否是有效的,你怎么进行判断?
按照正常的思路都是,从左至右遇见的每一个左括号都记录下来,遇见右括号的顺序要与左括号的先后顺序要相反才行,这个顺序就是重点,那么怎么将这个问题对应到相应的数据结构中去呢?
我们可以这样进行思考,遍历字符串,当我们遇见的每一个左括号的时候我们将其对应的右括号进行入栈操作,这个时候你可以想象当进行出栈操作的时候,肯定是与入栈的顺序相反的,这就是栈数据结构的特点先进后出,那么对应到这个问题当中,当我们遇见左括号的时候,将对应的右括号入栈,当遇见右括号的时候,进行出栈操作,判断是否相等,如果相等那么证明这个括号配对完成。当字符串遍历结束后,我们可以在此进行判断栈是否为空,如果为空那么证明字符串一一对应,则返回为真。
废话不多说,直接上代码
class Solution {
public boolean isValid(String s) {
//定义一个字符栈
Stack<Character> charArray = new Stack<Character>();
if(s.isEmpty()){
return true;
}
//强制for循环
for(char c:s.toCharArray()){
if( c == '{'){
charArray.push('}');
}else if(c == '('){
System.out.println("=======");
charArray.push(')');
}else if(c == '['){
charArray.push(']');
}else if(charArray.isEmpty() || c != charArray.pop()){
return false;
}
}
if(charArray.isEmpty()){
return true;
}else{
return false;
}
}
}
在解决这个问题中,我们遇到了字符串,但是需要对字符串中的每一个字符进行遍历,但是对于字符串不能直接遍历其中的每一个字符,对于遍历我们一般最直观的思路都是对于数组链表进行遍历,因此我们可以选择将字符串转化为一个字符数组,这样就可以进行遍历了,因此需要用到这个方法
char[] charArray = s.toCharArray();
这个方可以将字符串转化为字符数组,进而方便遍历!!
小二 你明白了吗?