★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
➤微信公衆號:山青詠芝(shanqingyongzhi)
➤博客園地址:山青詠芝(https://www.cnblogs.com/strengthen/)
➤GitHub地址:https://github.com/strengthen/LeetCode
➤原文地址:http://www.javashuo.com/article/p-kklaqgdk-md.html
➤若是連接不是山青詠芝的博客園地址,則多是爬取做者的文章。
➤原文已修改更新!強烈建議點擊原文地址閱讀!支持做者!支持原創!
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★html
We are given that the string "abc"
is valid.git
From any valid string V
, we may split V
into two pieces X
and Y
such that X + Y
(X
concatenated with Y
) is equal to V
. (X
or Y
may be empty.) Then, X + "abc" + Y
is also valid.github
If for example S = "abc"
, then examples of valid strings are: "abc", "aabcbc", "abcabc", "abcabcababcc"
. Examples of invalid strings are: "abccba"
, "ab"
, "cababc"
, "bac"
.微信
Return true
if and only if the given string S
is valid. app
Example 1:spa
Input: "aabcbc"
Output: true Explanation: We start with the valid string "abc". Then we can insert another "abc" between "a" and "bc", resulting in "a" + "abc" + "bc" which is "aabcbc".
Example 2:code
Input: "abcabcababcc"
Output: true Explanation: "abcabcabc" is valid after consecutive insertings of "abc". Then we can insert "abc" before the last letter, resulting in "abcabcab" + "abc" + "c" which is "abcabcababcc".
Example 3:htm
Input: "abccba"
Output: false
Example 4:blog
Input: "cababc"
Output: false
Note:ci
1 <= S.length <= 20000
S[i]
is 'a'
, 'b'
, or 'c'
給定有效字符串 "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
。
示例 1:
輸入:"aabcbc" 輸出:true 解釋: 從有效字符串 "abc" 開始。 而後咱們能夠在 "a" 和 "bc" 之間插入另外一個 "abc",產生 "a" + "abc" + "bc",即 "aabcbc"。
示例 2:
輸入:"abcabcababcc" 輸出:true 解釋: "abcabcabc" 是有效的,它能夠視做在原串後連續插入 "abc"。 而後咱們能夠在最後一個字母以前插入 "abc",產生 "abcabcab" + "abc" + "c",即 "abcabcababcc"。
示例 3:
輸入:"abccba" 輸出:false
示例 4:
輸入:"cababc" 輸出:false
提示:
1 <= S.length <= 20000
S[i]
爲 'a'
、'b'
、或 'c'
1 class Solution 2 { 3 func isValid( _ string: String ) -> Bool 4 { 5 var aStack: Int = 0 6 var bStack: Int = 0 7 for char in string.characters 8 { 9 if char == "a" 10 { 11 aStack += 1 12 } 13 else if char == "b" 14 { 15 bStack += 1 16 if bStack > aStack 17 { 18 return false 19 } 20 } 21 else if char == "c" 22 { 23 aStack -= 1 24 bStack -= 1 25 if aStack < 0 || bStack < 0 26 { 27 return false 28 } 29 } 30 } 31 return aStack == 0 && bStack == 0 32 } 33 }
52ms
1 class Solution { 2 func isValid(_ S: String) -> Bool { 3 var stack = [Character]() 4 for char in S { 5 if char == "c" { 6 guard stack.count >= 2 else { return false } 7 guard stack.removeLast() == "b" else { return false } 8 guard stack.removeLast() == "a" else { return false } 9 } else { 10 stack.append(char) 11 } 12 } 13 return stack.count == 0 14 } 15 }
56ms
1 class Solution { 2 func isValid(_ S: String) -> Bool { 3 var stack: [Character] = [] 4 for s in S { 5 switch s { 6 case "a", "b": stack.append(s) 7 case "c": 8 guard stack.count >= 2, 9 stack.removeLast() == "b", 10 stack.removeLast() == "a" else { 11 return false 12 } 13 default: fatalError() 14 } 15 } 16 17 return stack.isEmpty 18 } 19 }
80ms
1 class Solution { 2 func isValid(_ S: String) -> Bool { 3 let s = Array(S) 4 var v = [Character]() 5 var j = 0 6 while j < s.count { 7 v.append(s[j]) 8 if v.count >= 3 && 9 v[v.count - 3] == "a" && 10 v[v.count - 2] == "b" && 11 v[v.count - 1] == "c" { 12 v.removeLast(3) 13 } 14 j += 1 15 } 16 return v.count == 0 17 } 18 }
288ms
1 class Solution { 2 func isValid(_ S: String) -> Bool { 3 var S = S 4 while S.contains("abc") { 5 S = S.replacingOccurrences(of: "abc", with: "", options: .literal, range: nil) 6 } 7 return S.isEmpty 8 } 9 }
292ms
1 class Solution { 2 func isValid(_ S: String) -> Bool { 3 var curS = S 4 while curS.count >= 3 { 5 let str = (curS as NSString).replacingOccurrences(of: "abc", with: "") 6 7 curS = str 8 if !(str as NSString).contains("abc") { break} 9 } 10 return curS.count == 0 11 } 12 }