20. 有效的括号
题目链接:有效的括号
这道题的作法是将与左括号相匹配的括号放入栈中,再和右括号匹配,匹配不成功或最后栈不为空,那就失败
class Solution {
public boolean isValid(String s) {
char [] f=s.toCharArray();
Stack<Character> st=new Stack<Character>();
for(int i=0;i<f.length;i++)
{
if(f[i]=='(')
{
st.push(')');
}
else if(f[i]=='['){
st.push(']');
}
else if(f[i]=='{')
{
st.push('}');
}
else if(st.isEmpty()||f[i]!=st.peek())
{
return false;
}
else
{
st.pop();
}
}
return st.isEmpty();
}
}
1047. 删除字符串中的所有相邻重复项
题目链接:删除字符串中的所有相邻重复项
这道题是将字符串里的数先匹配传入栈中,如果与栈中的元素相配,就删除栈中的元素,最后返回栈中剩下的元素。
class Solution {
public String removeDuplicates(String s) {
Stack<Character> f1=new Stack();
for(int i=0;i<s.length();i++)
{
if(f1.isEmpty()||s.charAt(i)!=f1.peek())
{
f1.push(s.charAt(i));
}
else
{
f1.pop();
}
}
String sr="";
while(!f1.isEmpty())
{
sr=f1.pop()+sr;
}
return sr;
}
}
150. 逆波兰表达式求值
题目链接:
逆波兰表达式求值
这道题是将字符串元素放入栈中,如果字符串中的元素是为算数符号那就将栈中的两个元素调出运算。
class Solution {
public int evalRPN(String[] tokens) {
Deque <Integer> s2=new LinkedList<Integer>();
for(int i=0;i<tokens.length;i++)
{
String op=tokens[i];
if(isNumber(op))
{
s2.push(Integer.parseInt(op));
}
else{
int t1=s2.pop();
int t2=s2.pop();
switch(op)
{
case "+":
s2.push(t2+t1);
break;
case "-":
s2.push(t2-t1);
break;
case "*":
s2.push(t2*t1);
break;
case "/":
s2.push(t2/t1);
break;
default:
}
}
}
return s2.pop();
}
public boolean isNumber(String op)
{
return !("+".equals(op)||"-".equals(op)||"*".equals(op)||"/".equals(op));
}
}
总结:今天的题比较容易想到方法,但是代码实现有些困难,主要是一些方法调用不熟练。