给你一个字符串
s
,请你判断它是否 有效 。字符串
s
有效 需要满足:假设开始有一个空字符串t = ""
,你可以执行 任意次 下述操作将t
转换为s
:
- 将字符串
"abc"
插入到t
中的任意位置。形式上,t
变为tleft + "abc" + tright
,其中t == tleft + tright
。注意,tleft
和tright
可能为 空 。如果字符串
s
有效,则返回true
;否则,返回false
。
示例 1:
输入:s = "aabcbc" 输出:true 解释:"" -> "abc" -> "aabcbc" 因此,"aabcbc" 有效。
示例 2:
输入:s = "abcabcababcc" 输出:true 解释:"" -> "abc" -> "abcabc" -> "abcabcabc" -> "abcabcababcc" 因此,"abcabcababcc" 有效。
示例 3:
输入:s = "abccba" 输出:false 解释:执行操作无法得到 "abccba" 。
提示:
1 <= s.length <= 2 * 104
s
由字母'a'
、'b'
和'c'
组成
Java通过代码
class Solution {
public boolean isValid(String s) {
//模拟栈,每次入栈都检查栈顶三个字符是否等于“abc”,相等则出栈,遍历完s后,如果stack长度为0则全部匹配“abc”返回true,否则返回false
StringBuffer stack = new StringBuffer();
int n = s.length();
int i = 0;
//遍历s
while (i < n){
//入栈
stack.append(s.charAt(i));
int length = stack.length();
//栈长度大于等于3时才判断
if(length >= 3){
//取栈顶3个字符与“abc”比较,相同则弹栈
if (stack.substring(length - 3).equals("abc")){
stack.delete(length - 3, length);
}
}
i++;
}
if (stack.length() == 0){
return true;
}
return false;
}
}