美文网首页
leetcode 544.反转字符串2

leetcode 544.反转字符串2

作者: Burlong | 来源:发表于2021-12-13 09:35 被阅读0次

    leetcode 544 反转字符串2

    /**
     * leetcode 544 反转字符串2
     * 给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
     * 如果剩余字符少于 k 个,则将剩余字符全部反转。
     * 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
     *
     * 示例 1:
     * 输入:s = "abcdefg", k = 2
     * 输出:"bacdfeg"
     *
     * 示例 2:
     * 输入:s = "abcd", k = 2
     * 输出:"bacd"
     *
     * 难度:easy
     *
     */
    public class ReverseString2 {
    
        public static void main(String[] args) {
            ReverseString2 reverseString2 = new ReverseString2();
            System.out.println(reverseString2.reverseStr("abcd", 4));
            System.out.println(reverseString2.reverseStr("abcdefg", 2));
        }
    
        public String reverseStr(String s, int k) {
            int n = s.length();
            char[] arr = s.toCharArray();
            // 每次步长为2k
            for (int i = 0; i < n; i += 2 * k) {
            // 如果i+k-1没有越界,则每次对(i,i+k-1)做反转,如果越界则用n-1
                reverse(arr, i, Math.min(n, i + k) - 1);
            }
            return new String(arr);
        }
    
        public void reverse(char[] arr, int left, int right) {
            // 写法1
            for (int i = left; i < right; i++, right--) {
                char temp = arr[i];
                arr[i] = arr[right];
                arr[right] = temp;
            }
    
            // 写法2
    //        while (left < right) {
    //            char temp = arr[left];
    //            arr[left] = arr[right];
    //            arr[right] = temp;
    //            left++;
    //            right--;
    //        }
        }
    
    }
    

    相关文章

      网友评论

          本文标题:leetcode 544.反转字符串2

          本文链接:https://www.haomeiwen.com/subject/znbwzltx.html