题目的链接在这里:https://leetcode-cn.com/problems/check-if-word-is-valid-after-substitutions/
题目大意
给定有效字符串 "abc"。对于任何有效的字符串 V,我们可以将 V 分成两个部分 X 和 Y,使得 X + Y(X 与 Y 连接)等于 V。(X 或 Y 可以为空。)那么,X + “abc” + Y 也同样是有效的。
例如,如果 S = “abc”,则有效字符串的示例是:“abc”,“aabcbc”,“abcabc”,“abcabcababcc”。无效字符串的示例是:“abccba”,“ab”,“cababc”,“bac”。
如果给定字符串 S 有效,则返回 true;否则,返回 false。
一、示意图
二、解题思路
java实现(用String函数)
代码如下:
class Solution {
public boolean isValid(String s) {
//这道题原本是有用入栈出栈的操作来写的,但是
//看到评论里有个机智的写法,完全可以不用入栈出栈操作
//直接判断他是不是还包含这个
while(s.contains("abc")){
//还包含就替换掉,也就等于删去
s=s.replace("abc","");
}
//然后判断这两个是不是相同的
return s.equals("");
}
}
java实现(用栈)
代码如下:
class Solution {
public boolean isValid(String s) {
//创建一个char的栈
Stack<Character> cha=new Stack<Character>();
//然后就是循环把S放进去,并且如果放的是c的话。就需要判断一下前面几个是不是a和b
for(int i=0;i<s.length();i++){
if(s.charAt(i)=='c'){
//就是直接看栈里的前一个是不是b,再前一个是不是a
if(cha.isEmpty()||cha.pop()!='b') {
return false;
}
if(cha.isEmpty()||cha.pop()!='a'){
//经过了前一步之后再判断
return false;
}
}else{
//这些都没的话,就正常放入
cha.push(s.charAt(i));
}
}
//最后看栈是不是为空
return cha.isEmpty();
}
}