zblog批量添加文章标签,sql语句根据文章标题添加标签

数据结构与算法:快速排序

  返回  

力扣 541. 反转字符串 II(简单)

2021/8/20 11:13:28 浏览:

题目

给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。

  • 如果剩余字符少于 k 个,则将剩余字符全部反转。
  • 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
    示例 1:
输入:s = "abcdefg", k = 2
输出:"bacdfeg"

示例 2:

输入:s = "abcd", k = 2
输出:"bacd"

提示:

  • 1 < = s . l e n g t h < = 1 0 4 1 <= s.length <= 10^4 1<=s.length<=104
  • s 仅由小写英文组成
  • 1 < = k < = 1 0 4 1 <= k <= 10^4 1<=k<=104

题解

每次都直接加2*k,这样每次都是需要翻转的开始位置。

class Solution {
    public String reverseStr(String s, int k) {
        StringBuffer res = new StringBuffer();
        int len = s.length();
        int start = 0;
        while(start < len){
            // 找到k处和2k处
            StringBuffer temp = new StringBuffer(); 
            int k1 = (start + k > len) ? len : start + k;
            int k2 = (start + (2 * k) > len) ? len : start + (2 * k);

            // 无论start所处的位置,至少会翻转一次
            temp.append(s.substring(start, k1));  // 将字符串s中[start,k1)部分添加进temp中
            res.append(temp.reverse());   // 将temp反转加入res

            if(k1 < k2){  // 此时剩余长度大于k
                res.append(s.substring(k1, k2));  // 将k1到k2之间的元素直接放入res中
            }

            start += 2 * k;
        }
        return res.toString();
    }
}
class Solution {
    public String reverseStr(String s, int k) {
        int n = s.length();
        char[] arr = s.toCharArray();
        for (int i = 0; i < n; i += 2 * k) {
            reverse(arr, i, Math.min(i + k, n) - 1);  // 判断是否超过了字符串长度,超过就翻转剩余字符
        }
        return new String(arr);
    }

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

作者:LeetCode-Solution
链接:https://leetcode-cn.com/problems/reverse-string-ii/solution/fan-zhuan-zi-fu-chuan-ii-by-leetcode-sol-ua7s/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

联系我们

如果您对我们的服务有兴趣,请及时和我们联系!

服务热线:18288888888
座机:18288888888
传真:
邮箱:888888@qq.com
地址:郑州市文化路红专路93号