LeetCode in Kotlin

3823. Reverse Letters Then Special Characters in a String

Easy

You are given a string s consisting of lowercase English letters and special characters.

Your task is to perform these in order:

Return the resulting string after performing the reversals.

Example 1:

Input: s = “)ebc#da@f(“

Output: “(fad@cb#e)”

Explanation:

Example 2:

Input: s = “z”

Output: “z”

Explanation:

The string contains only one letter, and reversing it does not change the string. There are no special characters.

Example 3:

Input: s = “!@#$%^&*()”

Output: “)(*&^%$#@!”

Explanation:

The string contains no letters. The string contains all special characters, so reversing the special characters reverses the whole string.

Constraints:

Solution

class Solution {
    fun reverseByType(s: String): String {
        val arr = s.toCharArray()
        var low = 0
        var high = arr.size - 1
        while (low < high) {
            if (arr[low] >= 'a' && arr[low] <= 'z' && arr[high] >= 'a' && arr[high] <= 'z') {
                val t = arr[low]
                arr[low] = arr[high]
                arr[high] = t
                low++
                high--
            } else if (arr[low] < 'a' || arr[low] > 'z') {
                low++
            } else {
                high--
            }
        }
        var i = 0
        var j = arr.size - 1
        while (i < j) {
            if ((arr[i] < 'a' || arr[i] > 'z') && (arr[j] < 'a' || arr[j] > 'z')) {
                val t = arr[i]
                arr[i] = arr[j]
                arr[j] = t
                i++
                j--
            } else if (arr[i] >= 'a' && arr[i] <= 'z') {
                i++
            } else {
                j--
            }
        }
        return String(arr)
    }
}