package leetcode;
import java.util.Stack;
public class Main {
public boolean isValid(String S) {
//一些前提条件
if (S == null || S.length() == 0)
return true;
if (S.length() % 3 != 0)
return false;
//采用栈来解决
Stack st = new Stack();
//一个一个遍历 首先找到第一个c 前面必须是a b 消去后找到第二个c 即视为 第一个c的效果
for (int i = 0; i < S.length(); i++) {
if (S.charAt(i) == 'c')
{
if(st.size()<2) {
return false;
}
String s = st.pop();
if (!s.equals("b") )
{
return false;
}
s = st.pop();
if (!s.equals("a") )
{
return false;
}
}
//如果是a b 直接压到栈里面
else
{
st.push((S.charAt(i) + ""));
}
}
return true;
}
//测试代码
public static void main(String[] args) {
Main m = new Main();
String str = "aabcbc";
System.out.println(m.isValid(str));
}
}
- 另外一种是:
满足基本条件之后,找到一个abc的位置i 截取前后subString(0,i-1)+subString(i+3,S.length()-1) 一次消去abc 循环太多遍了