zoukankan      html  css  js  c++  java
  • [LeetCode] 541. Reverse String II

    Given a string and an integer k, you need to reverse the first k characters for every 2k characters counting from the start of the string. If there are less 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 left the other as original.

    Example:

    Input: s = "abcdefg", k = 2
    Output: "bacdfeg"

    Restrictions:

    1. The string consists of lower English letters only.
    2. Length of the given string and k will in the range [1, 10000]

    反转字符串二。题意跟版本一很接近,多一个限制条件K。需要反转每2K个字符,如果剩下的字符长度不足,就整个反转他们。

    这个题出的不是很好。题目不难但是题意讲的非常绕,差评很多。既然是反转每2K个字母,则正常逻辑会认为反转部分的轴是在第K个字母附近,但是根据例子,因为K = 2所以涉及到的字母是前四个ABCD,但是实际被反转的字母只有前K个,AB。所以这个题可以理解为每2K个字母,只反转前K个字母。

    时间O(n^2)

    空间O(n) - 因为convert成了数组

    JavaScript实现

     1 /**
     2  * @param {string} s
     3  * @param {number} k
     4  * @return {string}
     5  */
     6 var reverseStr = function (s, k) {
     7     let t = s.split('');
     8     for (let i = 0; i < s.length; i += 2 * k) {
     9         let start = i;
    10         let end = i + k - 1;
    11         while (start < end) {
    12             const temp = t[start];
    13             t[start] = t[end];
    14             t[end] = temp;
    15             start++;
    16             end--;
    17         }
    18     }
    19     return t.join('');
    20 };

    Java实现

     1 class Solution {
     2     public String reverseStr(String s, int k) {
     3         char[] input = s.toCharArray();
     4         for (int i = 0; i < input.length; i += 2*k) {
     5             int start = i;
     6             int end = Math.min(start + k - 1, input.length - 1);
     7             while (start < end) {
     8                 char temp = input[start];
     9                 input[start] = input[end];
    10                 input[end] = temp;
    11                 start++;
    12                 end--;
    13             }
    14         }
    15         return String.valueOf(input);
    16     }
    17 }

    相关题目

    344. Reverse String

    541. Reverse String II

    557. Reverse Words in a String III

    LeetCode 题目总结

  • 相关阅读:
    设计模式:单一职责原则
    多线程的创建
    Android开发基础(java)14
    面向对象编程的思想(6)
    面向对象编程的思想(5)未完成
    面向对象编程的思想(4)
    面向对象编程的思想(3)
    面向对象编程的思想(2)
    面向对象编程的思想(1)
    GDB 命令详细解释
  • 原文地址:https://www.cnblogs.com/cnoodle/p/12220090.html
Copyright © 2011-2022 走看看