Advertisement
HXXXXJ

compare number

Mar 12th, 2019
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 1.14 KB | None | 0 0
  1. func check(_ str1: String, _ str2 : String) ->Int {
  2.     guard str1.count > 0 else { return str2.count}
  3.     guard str2.count > 0 else { return str1.count}
  4.  
  5.     var p1 = 0
  6.     var p2 = 0
  7.     let l1 = Array(str1)
  8.     let l2 = Array(str2)
  9.    
  10.     while p1 < l1.count && p2 < l2.count{
  11.         let char1 = l1[p1]
  12.         let char2 = l2[p2]
  13.         if char1 == char2{
  14.             p1 += 1
  15.             p2 += 1
  16.             continue
  17.         }
  18.         if !isDigit(char1)  || !isDigit(char2) { return char1 < char2 ? -1 : 1}     //not number
  19.         let n1 = getNumber(&p1, l1)
  20.         let n2 = getNumber(&p2, l2)
  21.         if n1 != n2 {
  22.             return n1 - n2
  23.         }
  24.         p1 += 1
  25.         p2 += 1
  26.     }
  27.     if l1.count == l2.count {return 0}
  28.     return p1 == l1.count ? -1 : 1
  29. }
  30.  
  31. func isDigit(_ char : Character) -> Bool{
  32.     return char >= "0" && char <= "9"
  33. }
  34. func getNumber(_ p : inout Int, _ arr : [Character]) -> Int{
  35.     var n = 0
  36.     while  p < arr.count && isDigit(arr[p]){
  37.         n = n * 10 + Int(String(arr[p]))!
  38.         p += 1
  39.     }
  40.     return n
  41. }
  42.  
  43. let str1 = "a10b"
  44. let str2 = "a2b"
  45. print( check(str1, str2) )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement