问题链接:https://leetcode.com/problems/check-if-word-is-valid-after-substitutions/
问题理解比较绕,简而言之,字符串是由若干“abc”插入到若干个“abc”序列中(任意位置)形成的。
思路一:这里反其道而行,不断的删除“abc”,如果序列不为空字符串且不存在子串“abc”,说明不合法!
class Solution {
public boolean isValid(String S) {
while(S.indexOf("abc")!=-1)
{
S=S.replaceAll("abc","");
}
return S.equals("");
}
}
思路二:‘c’字符一定是在‘ab’之后的,每次找到连续的“abc”就删除,这里借助栈来实现
class Solution {
public boolean isValid(String S) {
Stack<Character> st=new Stack<>();
for(int i=0;i<S.length();i++)
{
if(S.charAt(i)=='a' || S.charAt(i)=='b')
st.push(S.charAt(i));
if(S.charAt(i)=='c')
{
if(st.size()<2)
return false;
char c1=st.pop(),c2=st.pop();
if(c1!='b' || c2!='a')
return false;
}
}
return st.isEmpty();
}
}