当前位置:网站首页>leetcode刷题:字符串02( 反转字符串II)
leetcode刷题:字符串02( 反转字符串II)
2022-06-26 20:30:00 【涛涛英语学不进去】
541. 反转字符串II
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
示例:
输入: s = “abcdefg”, k = 2
输出: “bacdfeg”
就是每2*k个为一组(这点很重要!),完整的组里,前k个反转,后k个不变。剩余部分不足一半,就是k,则全部反转加进去,如果比一半多,则那k个反转即可。
有两个特殊情况,就是一共不到一组。单独拎出来处理了。
package com.programmercarl.string;
/** * @ClassName ReverseStr * @Descriotion TODO * @Author nitaotao * @Date 2022/6/23 17:45 * @Version 1.0 * https://leetcode.cn/problems/reverse-string-ii/ * 541. 反转字符串 II **/
public class ReverseStr {
public static void main(String[] args) {
System.out.println(reverseStr("abcdefg", 3));
}
public static String reverseStr(String s, int k) {
//说白了就是每 [0,k-1] 反转 [k,2k-1]不变
// 轮转time次 45
int time = s.length() / (2 * k);
String result = "";
if (s.length() < k) {
result += reverseString(s.substring(0, s.length()).toCharArray());
return result;
}
if (s.length() <= 2 * k) {
result += reverseString(s.substring(0, k).toCharArray());
result += s.substring(k);
return result;
}
int index = 0;
while (index < time) {
result += reverseString(s.substring(index * 2 * k, index * 2 * k + k).toCharArray());
result += s.substring(index * 2 * k + k, index * 2 * k + 2 * k);
index++;
}
// 多于的部分
//如果剩余字符少于 k 个,则将剩余字符全部反转。
System.out.println(result);
if (s.length() - time * 2 * k < k) {
result += reverseString(s.substring(time * 2 * k).toCharArray());
} else {
//如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
result += reverseString(s.substring(time * 2 * k, time * 2 * k + k).toCharArray());
result += s.substring(time * 2 * k + k);
}
return result;
}
public static String reverseString(char[] s) {
//双指针法
int left = 0;
int right = s.length - 1;
while (left < right) {
char temp = s[left];
s[left] = s[right];
s[right] = temp;
left++;
right--;
}
return String.valueOf(s);
}
}

边栏推荐
- 威胁猎人必备的六个威胁追踪工具
- JS mobile terminal touch screen event
- 30. 串联所有单词的子串
- C# 练习。类列表加记录,显示记录和清空记录
- BOM and DOM operations
- Disruptor本地线程队列_使用transProcessor处理器和WorkPool两种方式进行消费对比---线程间通信工作笔记005
- Introduction to single chip microcomputer one-on-one learning strategy, independent development program immediately after reading
- 【贝叶斯分类3】半朴素贝叶斯分类器
- 抖音实战~首页视频~下拉刷新
- Solve com mysql. jdbc. exceptions. jdbc4.MySQLNonTransientConnectionException: Could not create connection
猜你喜欢

Tiktok practice ~ search page ~ video details

Some cold knowledge about QT database development

Detailed explanation of shutter textfield

分布式ID生成系统

Unity——Mathf. Similarities and differences between atan and atan2

Muke 11. User authentication and authorization of microservices

Review of watermelon book (VII): Bayesian classifier (manual push + code demo)

抖音实战~首页视频~下拉刷新

抖音实战~搜索页面~视频详情

阿里云个人镜像仓库日常基本使用
随机推荐
C primer plus学习笔记 —— 3、字符的IO(输入/输出)
Serial port application program based on gd32
mongoDB的三种基础备份方法
Arduino uno + DS1302 uses 31 byte static RAM to store data and print through serial port
2022/02/14 line generation
Button how to dynamically set drawablebottom (setcomposunddrawables is invalid)
两个文件 合并为第三个文件 。
Three basic backup methods of mongodb
Developer survey: rust/postgresql is the most popular, and PHP salary is low
0基础c语言(0)
JWT operation tool class sharing
mysql存储过程
460million zongzi were sold in half a year. How big is the "imagination space" of time-honored brands?
C语言 文件光标 fseek
vue中缓存组件keep-alive
0基础学c语言(1)
GameFi 活跃用户、交易量、融资额、新项目持续性下滑,Axie、StepN 能摆脱死亡螺旋吗?链游路在何方?
30. 串联所有单词的子串
MySQL - subquery usage
JWT操作工具类分享