1.括号匹配问题
思路:
- 如果当前元素为左括号,则入栈
- 栈顶元素和当前元素匹配,则栈顶元素出栈
- 遇到左括号就入栈,最终,如果栈里面元素为空,则说明匹配,否则左括号或者右括号过多
package com.bite.everydaytaozhu;
import java.util.Stack;
public class kuohaopipei {
public static boolean isValid(String str){
Stack<Character> stack = new Stack<>();
for(int i = 0; i <str.length(); i++){
if(str.charAt(i) == '(' || str.charAt(i) == '{' || str.charAt(i) == '[' ){
stack.push(str.charAt(i));
}else{
if(stack.isEmpty()){
return false;
}else{
if(str.charAt(i) == ')' && stack.peek() == '('
|| str.charAt(i) == '}' && stack.peek() == '{'
|| str.charAt(i) == ']' && stack.peek() == '['){
stack.pop();
}else if(str.charAt(i) == '(' || str.charAt(i) == '{' || str.charAt(i) == '[' ){
stack.push(str.charAt(i));
}else{
return false;
}
}
}
}
if(stack.isEmpty()){
return true;
}else{
return false;
}
}
public static void main(String[] args) {
String s = "{}}";
System.out.println(isValid(s));
}
}
2.整理字符串
//给你一个由大小写英文字母组成的字符串 s 。 //一个整理好的字符串中,两个相邻字符 s[i] 和 s[i+1],其中 0<= i <= s.length-2 ,要满足如下条件: //若 s[i] 是小写字符,则 s[i+1] 不可以是相同的大写字符。 //若 s[i] 是大写字符,则 s[i+1] 不可以是相同的小写字符。 //请你将字符串整理好,每次你都可以从字符串中选出满足上述条件的 两个相邻 字符并删除,直到字符串整理好为止。 //请返回整理好的 字符串 。题目保证在给出的约束条件下,测试样例对应的答案是唯一的。 //注意:空字符串也属于整理好的字符串,尽管其中没有任何字符。 //示例 1: // 输入:s = "leEeetcode" // 输出:"leetcode" // 解释:无论你第一次选的是 i = 1 还是 i = 2,都会使 "leEeetcode" 缩减为 "leetcode" 。 // 示例 2: // // 输入:s = "abBAcC" // 输出:"" // 解释:存在多种不同情况,但所有的情况都会导致相同的结果。例如: // "abBAcC" --> "aAcC" --> "cC" --> "" // "abBAcC" --> "abBA" --> "aA" --> ""s
思路:
- 栈为空,入栈当前元素
- 栈不为空,判断当前元素和栈顶元素是否为大小写,若为同一字母的大小写,则弹出栈顶元素;否则,入栈当前元素
public class zhenglizifuchuan {
public static String makeGood(String str){
StringBuffer stringBuffer = new StringBuffer();
Stack<Character> stack = new Stack<>();
for(int i = 0; i < str.length(); i++){
if(stack.isEmpty()){
stack.push(str.charAt(i));
}else{
if(stack.peek()-str.charAt(i) == 32 || stack.peek()-str.charAt(i)==-32){
stack.pop();
}else{
stack.push(str.charAt(i));
}
}
}
while(!stack.isEmpty()){
stringBuffer.append(stack.pop());
}
return stringBuffer.reverse().toString();
}
public static void main(String[] args) {
String str = "leEeetcode";
System.out.println(makeGood(str));
}
}