Advertisement
Guest User

Untitled

a guest
Dec 5th, 2019
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Swift 2.25 KB | None | 0 0
  1.  
  2. /**
  3.  Just reversed string
  4. */
  5. func revesedString(_ str: String) -> String {
  6.     return String(str.reversed())
  7. }
  8.  
  9. /**
  10.  If str has brakets, methods remove them.
  11.  If method hasn't brakets, this method makes only reversed
  12. */
  13. func removeBrakets(_ str: String) -> String {
  14.     guard let rangeBrakets = findRangeBrakets(str) else { return revesedString(str) }
  15.     let start = str.index(after: rangeBrakets.startIndex)
  16.     let end = str.index(before: rangeBrakets.endIndex)
  17.     let rangeWithoutBrakets = start...end
  18.     let strWithoutBrakets = String(str[rangeWithoutBrakets])
  19.     return strWithoutBrakets
  20. }
  21.  
  22.  
  23. /**
  24.  This method find range brakets.
  25.  For Example: we have str equal to 12(34(56)78)90,
  26.  in the first we searching braket ")", we got index 8
  27.  after it we searching braket "(" in deapeason 0..<8 (12(34(56)
  28.  end the end we have indexes 5 and 8
  29.  str[5..<8] equal "(56)"
  30. */
  31. func findRangeBrakets(_ str: String) -> (startIndex: String.Index, endIndex: String.Index)? {
  32.     guard let lastIndex = str.firstIndex(of: ")") else { return nil }
  33.     let leftSideArrange = str.startIndex..<lastIndex
  34.     let leftSideStr = String(str[leftSideArrange])
  35.     guard let firstIndex = leftSideStr.lastIndex(of: "(") else { return nil }
  36.     return (firstIndex, lastIndex)
  37. }
  38.  
  39. func reversedService(_ str: String) -> String {
  40.    
  41.     //if brakets didn't find, makes reverse string and return
  42.     guard let rangeBrakets = findRangeBrakets(str) else { return revesedString(str) }
  43.    
  44.     let rightFirstIndex = str.index(after: rangeBrakets.endIndex)
  45.    
  46.     let leftStr = String(str[str.startIndex..<rangeBrakets.startIndex])
  47.     let rightStr = String(str[rightFirstIndex..<str.endIndex])
  48.    
  49.     let midleStrWithoutBrakets = removeBrakets(str)
  50.     let newStr = leftStr + midleStrWithoutBrakets + rightStr
  51.     return reversedService(newStr)
  52. }
  53.  
  54. let str1 = "56"
  55. print(reversedService(str1))
  56.  
  57. let str2 = "(56)"
  58. print(reversedService(str2))
  59.  
  60. var str = "12(34(56)78)90"
  61. print(reversedService(str))
  62.  
  63. str = "(bar)"
  64. print(reversedService(str))
  65.  
  66. str = "foo(bar)baz"
  67. print(reversedService(str))
  68.  
  69. str = "foo(bar(baz))blim"
  70. print(reversedService(str))
  71.  
  72. str = "foo(bar)baz(blim)"
  73. print(reversedService(str))
  74.  
  75. str = "(abc)d(efg)"
  76. print(reversedService(str))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement