⬆︎
×

[LC] 0541 Reverse String II

Java

/**
 * <a href="https://leetcode.cn/problems/reverse-string-ii/">Reverse String II</a>
 * 双指针;字符串
 */
class Solution {
    public String reverseStr(String s, int k) {
        char[] arr = s.toCharArray();
        for (int i = 0; i < s.length(); i += 2 * k) {
            reverse(arr, i, Math.min(i + k, s.length()) - 1);
        }
        return new String(arr);
    }

    public void reverse(char[] arr, int l, int r) {
        while (l < r) {
            char temp = arr[l];
            arr[l] = arr[r];
            arr[r] = temp;
            l++;
            r--;
        }
    }
}

Go

func reverseStr(s string, k int) string {
    t := []byte(s)
    for i := 0; i < len(s); i += 2 * k {
        sub := t[i:getMin(i+k, len(s))]
        for j, n := 0, len(sub); j < n/2; j++ {
            sub[j], sub[n-1-j] = sub[n-1-j], sub[j]
        }
    }
    return string(t)
}

func getMin(a, b int) int {
    if a < b {
        return a
    }
    return b
}

JavaScript

var reverseStr = function (s, k) {
    const n = s.length;
    const arr = Array.from(s);
    for (let i = 0; i < n; i += 2 * k) {
        reverse(arr, i, Math.min(i + k, n) - 1);
    }
    return arr.join('');
};

const reverse = (arr, l, r) => {
    while (l < r) {
        const temp = arr[l];
        arr[l] = arr[r];
        arr[r] = temp;
        l++;
        r--;
    }
}

PHP

class Solution {

    /**
     * @param String $s
     * @param Integer $k
     * @return String
     */
    function reverseStr(string $s, int $k) {
        $arr = str_split($s);
        for ($i = 0; $i < strlen($s); $i += 2 * $k) {
            $this->reverse($arr, $i, min($i + $k, strlen($s)) - 1);
        }
        return implode('', $arr);
    }

    function reverse(&$arr, $l, $r) {
        while ($l < $r) {
            $temp = $arr[$l];
            $arr[$l] = $arr[$r];
            $arr[$r] = $temp;
            $l++;
            $r--;
        }
    }
}

发表评论