Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /**
- Just reversed string
- */
- func revesedString(_ str: String) -> String {
- return String(str.reversed())
- }
- /**
- If str has brakets, methods remove them.
- If method hasn't brakets, this method makes only reversed
- */
- func removeBrakets(_ str: String) -> String {
- guard let rangeBrakets = findRangeBrakets(str) else { return revesedString(str) }
- let start = str.index(after: rangeBrakets.startIndex)
- let end = str.index(before: rangeBrakets.endIndex)
- let rangeWithoutBrakets = start...end
- let strWithoutBrakets = String(str[rangeWithoutBrakets])
- return strWithoutBrakets
- }
- /**
- This method find range brakets.
- For Example: we have str equal to 12(34(56)78)90,
- in the first we searching braket ")", we got index 8
- after it we searching braket "(" in deapeason 0..<8 (12(34(56)
- end the end we have indexes 5 and 8
- str[5..<8] equal "(56)"
- */
- func findRangeBrakets(_ str: String) -> (startIndex: String.Index, endIndex: String.Index)? {
- guard let lastIndex = str.firstIndex(of: ")") else { return nil }
- let leftSideArrange = str.startIndex..<lastIndex
- let leftSideStr = String(str[leftSideArrange])
- guard let firstIndex = leftSideStr.lastIndex(of: "(") else { return nil }
- return (firstIndex, lastIndex)
- }
- func reversedService(_ str: String) -> String {
- //if brakets didn't find, makes reverse string and return
- guard let rangeBrakets = findRangeBrakets(str) else { return revesedString(str) }
- let rightFirstIndex = str.index(after: rangeBrakets.endIndex)
- let leftStr = String(str[str.startIndex..<rangeBrakets.startIndex])
- let rightStr = String(str[rightFirstIndex..<str.endIndex])
- let midleStrWithoutBrakets = removeBrakets(str)
- let newStr = leftStr + midleStrWithoutBrakets + rightStr
- return reversedService(newStr)
- }
- let str1 = "56"
- print(reversedService(str1))
- let str2 = "(56)"
- print(reversedService(str2))
- var str = "12(34(56)78)90"
- print(reversedService(str))
- str = "(bar)"
- print(reversedService(str))
- str = "foo(bar)baz"
- print(reversedService(str))
- str = "foo(bar(baz))blim"
- print(reversedService(str))
- str = "foo(bar)baz(blim)"
- print(reversedService(str))
- str = "(abc)d(efg)"
- print(reversedService(str))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement