541-反转字符串 II
2024-09-04 23:35:06
541-反转字符串 II
给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。
示例:
输入: s = "abcdefg", k = 2
输出: "bacdfeg"
要求:
- 该字符串只包含小写的英文字母。
- 给定字符串的长度和 k 在[1, 10000]范围内。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/reverse-string-ii
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
// 不借助API,最快
public String reverseStr(String s, int k) {
char[] a = s.toCharArray();
for (int start = 0; start < a.length; start += 2 * k) {
int i = start;
int j = Math.min(start + k - 1, a.length - 1);
while (i < j) {
char tmp = a[i];
a[i++] = a[j];
a[j--] = tmp;
}
}
return new String(a);
}
public String reverseStr_2(String s, int k) {
// 全部反转
StringBuilder reverse = new StringBuilder(s).reverse();
int len = s.length();
int loop = len / (2 * k);
int i = 0;
StringBuilder res = new StringBuilder();
while (loop > 0) {
res.append(reverse, len - k - i, len - i).append(s, k + i, 2 * k + i);
i += 2 * k;
loop--;
}
int remain = len - i;
if (remain < k) {
res.append(reverse, 0, remain);
} else {
res.append(reverse, len - k - i, len - i).append(s, k + i, len);
}
return res.toString();
}
比上面一个快点:只反转需要反转的部分
public String reverseStr_1(String s, int k) {
// 遍历,反转,拼接
int len = s.length();
int loop = len / (2 * k);
StringBuilder res = new StringBuilder();
while (loop > 0) {
res.append(new StringBuilder(s.substring(0, k)).reverse()).append(s, k, 2 * k);
s = s.substring(2 * k);
loop--;
}
StringBuilder sb = new StringBuilder(s);
if (sb.length() < k) {
res.append(sb.reverse());
} else {
res.append(new StringBuilder(s.substring(0, k)).reverse()).append(s.substring(k));
}
return res.toString();
}
最新文章
- Python基础5:列表 元祖 字典 集合
- 【转载】jQuery1.5之后的deferred对象详解
- AngularJS学习笔记一:简单入门
- Permutations [LeetCode]
- http meta
- jquery学习以及下载链接
- Myeclipse在启动Tomcat服务器的时候总是进入debug视图的解决方法
- 修改 “嗨加游-Prefix.pch” 或者 “嗨加游-Info.plist ” 方法
- openGL的使用步骤
- 关于并发,关于IIS你真的了解吗?(一)
- 《java入门第一季》之面向对象
- JavaScript基础系列
- expansion pattern ‘Frame&;’ contains no argument packs
- python摸爬滚打之day022----模块(序列化操作)
- CSS3 transform 属性
- ajaxFileupload 多文件上传
- SpringMVC系列(二): SpringMVC各个注解的使用
- QT编译错误:invalid application of &#39;sizeof&#39; to incomplete type &#39;Qt3DRender::QPickEvent&#39;
- [转载]Windows服务编写原理及探讨(2)
- office 文档转pdf