目录链接:
力扣编程题-解法汇总_分享+记录-CSDN博客
GitHub同步刷题项目:
https://github.com/September26/java-algorithms
原题链接:力扣
描述:
给你一个字符串 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 * 104s由字母'a'、'b'和'c'组成
解题思路:
* 解题思路: * 构建栈结构stack, * 如果遇到a,就压栈1,代表目前栈顶为a。 * 如果遇到b并且栈顶为1时,就把栈顶改为2,代表目前栈顶为ab。 * 如果遇到c并且栈顶为2时,就把栈顶去掉,因为目前栈顶为abc,符合移除的条件。 * 如果时其它场景,则证明不匹配,返回false。
代码:
public class Solution1003 {
public boolean isValid(String s) {
Stack<Integer> stack = new Stack<>();
char[] chars = s.toCharArray();
for (char aChar : chars) {
if (aChar == 'a') {
stack.add(1);
continue;
}
if (stack.size() == 0) {
return false;
}
Integer peek = stack.peek();
if (peek == 1 && aChar == 'b') {
stack.set(stack.size() - 1, peek + 1);
continue;
}
if (peek == 2 && aChar == 'c') {
stack.pop();
continue;
}
return false;
}
return stack.size() == 0;
}
}



















