문제 해설
- 해당 문자를 한개 지웠을때 문자열의 모든문자 count가 같아야한다.
-
[String: Int] 형태로 변경한 뒤에 다시 count를 가지고 [Int: Int] 형태로 만들어주는게 핵심
- 방법
func isValid(s: String) -> String {
let arr = s.map{ String($0) }
let dic = arr.reduce([:], { (res, current) -> [String: Int] in
var res = res
res[current] = (res[current] ?? 0) + 1
return res
})
let resultDic = dic.values.reduce([:], { (res, current) -> [Int: Int] in
var res = res
res[current] = (res[current] ?? 0) + 1
return res
})
if resultDic.values.count >= 3 {
return "NO"
} else if resultDic.values.count == 1 {
return "YES"
} else {
let min = resultDic.values.min()!
let dis = resultDic.keys.reduce(0) { abs($0 - $1) }
if min == 1 && dis == 1 {
return "YES"
} else {
if resultDic[1] == 1 {
return "YES"
} else {
return "NO"
}
}
}
}