askri79
Đã tốn tiền
Swift, hơi tốn ram tí ![shame :shame: :shame:](https://data.voz.vn/styles/next/xenforo/smilies/popopo/shame.png?v=01)
![shame :shame: :shame:](https://data.voz.vn/styles/next/xenforo/smilies/popopo/shame.png?v=01)
Check xem cắt partition một khúc đầu nó có phải là palindrome không, nếu phải thì đệ quy khúc sau.
Swift:
class Solution {
func partition(_ s: String) -> [[String]] {
guard s.count > 1 else { return [[s]] }
var results: [[String]] = []
func check(pre: [String], sub:[String.Element]) {
guard sub.count > 0 else {
results += [pre]
return
}
do {
var newSub = sub
newSub.removeFirst()
check(pre: pre + [String(sub.first!)], sub:newSub)
}
if sub.count > 1 {
for lenght in 2...sub.count {
//
var isPalindrome = true
for i in 0..<lenght/2 {
if sub[i] != sub[lenght-i-1] {
isPalindrome = false
break
}
}
if isPalindrome {
let strArr = lenght < sub.count ? Array(sub[0..<lenght]) : sub
let newSub = lenght < sub.count ? Array(sub[lenght..<sub.count]) : []
check(pre: pre + [String(strArr)], sub:newSub)
}
}
}
}
check(pre: [], sub: Array(s))
return results
}
}