一)删除字符串中所有相邻字符的重复项
1047. 删除字符串中的所有相邻重复项 - 力扣(LeetCode)
算法原理:栈结构+模拟,只是需要遍历所有字符串中的字符,一次存放到栈里面即可,也是可以使用数组来模拟一个栈结构的:
class Solution { public String removeDuplicates(String s) { Stack<Character> stack=new Stack<>(); String ret=""; for(char ch:s.toCharArray()){ if(stack.isEmpty()) stack.push(ch); else{ char top=stack.peek(); if(top==ch){ stack.pop(); }else{ stack.push(ch); } } } for(char ch:stack){ ret+=ch; } return ret; } }
class Solution { public String removeDuplicates(String s) { StringBuilder result=new StringBuilder(); for(char ch:s.toCharArray()){ if(result.length()==0){ result.append(ch); }else{ if(result.charAt(result.length()-1)==ch){ result.deleteCharAt(result.length()-1); }else{ result.append(ch); } } } return result.toString(); } }
二)比较含退格的字符串
844. 比较含退格的字符串 - 力扣(LeetCode)
算法原理:如果遇到空格,那么直接消掉前面的字符即可,如果当前的第一个字符是#,那么不会抵消前面的任何一个字符,仍然是一个空字符串
class Solution { public String changeStr(String str){ Stack<Character> stack=new Stack<>(); String ret=""; for(char ch:str.toCharArray()){ if(ch=='#'){ if(!stack.isEmpty()) stack.pop(); else continue; } else stack.push(ch); } for(char ch:stack) ret+=ch; return ret.toString(); } public boolean backspaceCompare(String s, String t) { return changeStr(s).equals(changeStr(t)); } }
三)基本运算器(2)
224. 基本计算器 - 力扣(LeetCode)
算法原理:
1)由于乘除运算优于加减运算,因此我们不妨先考虑先进行所有的乘除运算,并将这些乘除运算后的整数值放回到原表达式的位置,然后随后将所有的乘除运算都计算完成之后,随后整个表达式里面的值就是就是相当于是整个一系列整数相加减的值
2)因此我们可以使用一个栈,保存这些进行乘除运算之后的整数的值,对于加减号的数字可以直接压入到栈里面,对于乘除号的数字,可以直接和栈顶元素进行计算,并替换栈顶元素作为计算之后的结果