给定有效字符串 "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
。
利用栈来实现,如果扫描到a就入栈两个不同字符,如果遇到b或者c依次弹出两个不同的字符
class Solution:
"""
给定字符串abc,判断能否得到传入的字符串
转换的过程就是把字符串中间插入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"。
"""
def isValid(self, S: str) -> bool:
stack=[]
for c in S:
if c=='a':
stack.append('#')
stack.append('*')
else:
if not stack:
return False
if c=='b':
if stack[-1] != '*':
return False
if c=='c':
if stack[-1]!='#':
return False
stack.pop()
return not stack
看了下其他人的解法,发现调用replace效率好像更高...
def isValid(self, S: str) -> bool:
while S != "" and "abc" in S:
S=S.replace("abc","")#调用系统的函数,直接去除
return S==""