给你一个字符串 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' 组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/check-if-word-is-valid-after-substitutions
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
栈模拟吧。
遇到 'a' , 'b', 时入栈,遇到 'c' 时出栈并判断是否依次为 'b', 'a', 如果中间遇到了栈为空的情况则直接返回 false 。
class Solution { public boolean isValid(String s) { if (s.length() % 3 != 0) { return false; } Deque<Character> deque = new ArrayDeque<>(); for (int i = 0; i < s.length(); i++) { char tem = s.charAt(i); if (tem == 'c') { if (deque.isEmpty() || deque.removeLast() != 'b') { return false; } if (deque.isEmpty() || deque.removeLast() != 'a') { return false; } } else { deque.addLast(tem); } } return deque.isEmpty(); } }
标签:力扣,abc,false,deque,示例,---,字符串,return,1003 From: https://www.cnblogs.com/allWu/p/17369721.html