<?php

namespace App;

/**
 * Reverse String II
 *
 * Given a string s and an integer k, reverse the first k characters for every 2k characters counting from the start of
 * the string. If there are fewer than k characters left, reverse all of them. If there are less than 2k but greater
 * than or equal to k characters, then reverse the first k characters and leave the other as original.
 *
 * Example 1:
 * Input: s = "abcdefg", k = 2
 * Output: "bacdfeg"
 *
 * Example 2:
 * Input: s = "abcd", k = 2
 * Output: "bacd"
 *
 * https://leetcode.com/problems/reverse-string-ii
 */
class ReverseStringII
{
    /**
     * @param string $str
     * @param int $k
     * @return string
     */
    public function reverseStr(string $str, int $k): string
    {
        $strLength = strlen($str);
        for ($start = 0; $start < $strLength; $start += 2 * $k) {
            $i = $start;
            $j = min($start + $k - 1, $strLength - 1);
            while ($i < $j) {
                $tmp = $str[$i];
                $str[$i] = $str[$j];
                $str[$j] = $tmp;
                $i++;
                $j--;
            }
        }
        return $str;
    }
}
