Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- func expressiveWords(_ S: String, _ words: [String]) -> Int {
- let target = encode(S)
- var count = 0
- for w in words{
- if canStrich(encode(w), target) {
- count += 1
- }
- }
- return count
- }
- func encode(_ str: String) -> [(Character, Int)] {
- var res = [(Character, Int)] ()
- var preChar : Character?
- var count = 1
- for c in str {
- if preChar == nil {
- preChar = c
- continue
- }
- if preChar != nil && c == preChar{
- count += 1
- }else{
- res.append((preChar!, count))
- preChar = c
- count = 1
- }
- }
- res.append((preChar!, count))
- return res
- }
- func canStrich(_ str : [(Character, Int)], _ target : [(Character, Int)]) -> Bool{
- if str.count != target.count { return false}
- var i = 0
- // print(str)
- while i < str.count{
- let p1 = str[i]
- let p2 = target[i]
- if p1.0 != p2.0 { return false}
- if p1.1 != p2.1 {
- if p2.1 <= 2 || p2.1 < p1.1{ return false }
- }
- i += 1
- }
- return true
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement