Advertisement
HXXXXJ

809. Expressive Words

Apr 13th, 2019
132
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.32 KB | None | 0 0
  1. func expressiveWords(_ S: String, _ words: [String]) -> Int {
  2.         let target = encode(S)
  3.         var count = 0
  4.         for w in words{
  5.             if canStrich(encode(w), target) {
  6.                 count += 1
  7.             }
  8.         }
  9.         return count
  10.     }
  11.    
  12.     func encode(_ str: String) -> [(Character, Int)] {
  13.         var res = [(Character, Int)] ()
  14.         var preChar : Character?
  15.         var count = 1
  16.         for c in str {
  17.             if preChar == nil {
  18.                 preChar = c
  19.                 continue
  20.             }
  21.             if preChar != nil && c == preChar{
  22.                 count += 1
  23.             }else{
  24.                 res.append((preChar!, count))
  25.                 preChar = c
  26.                 count = 1
  27.             }
  28.         }
  29.         res.append((preChar!, count))
  30.         return res
  31.     }
  32.    
  33.    
  34.     func canStrich(_ str : [(Character, Int)], _ target : [(Character, Int)]) -> Bool{
  35.         if str.count != target.count { return false}
  36.         var i = 0
  37.         // print(str)
  38.         while i < str.count{
  39.             let p1 = str[i]
  40.             let p2 = target[i]
  41.             if p1.0 != p2.0 { return false}
  42.             if p1.1 != p2.1 {
  43.                 if p2.1 <= 2 || p2.1 < p1.1{ return false }
  44.             }
  45.             i += 1
  46.         }
  47.         return true
  48.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement