反转字符串II(541)
题目描述
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
解题思路
如果按照我们暴力解法的话我们肯定是想一个一个的for循环去遍历,其实这道题说了每次是以2k的进度往前跳跃的,我们可以每次以2k为单位向前移动,然后在做一些边界处理,整体代码不是很难理解,主要是要考虑好各种细节问题,这个你可以自己多尝试提交几次就可以不断的去完善
import java.util.*;
class Solution {
public String reverseStr(String s, int k) {
StringBuilder result=new StringBuilder();
StringBuilder temp;
for(int i=0;i<s.length();i+=2*k){
//这一步是处理你的字符串长度可能连轮一个来回都不够的情况
if(i==0 && s.length()<k){
temp=new StringBuilder();
result.append(temp.append(s.substring(i,s.length())).reverse().toString());
break;
}else if( i==0 && k<=s.length() && s.length()<2*k ){
temp=new StringBuilder();
temp.append(s.substring(i,i+k));
result.append(temp.reverse().toString());
result.append(s.substring(i+k,s.length()));
break;
}
//进行反转前k个字符,然后剩余的原封不动的复制下来
temp=new StringBuilder();
temp.append(s.substring(i,i+k));
result.append(temp.reverse().toString());
result.append(s.substring(i+k,i+2*k));
//处理不够下一个轮回的情况,就是题目说的那两种种情况
if( (s.length()-(i+2*k))<k){
temp=new StringBuilder();
result.append(temp.append(s.substring(i+2*k,s.length())).reverse().toString());
break;
}else if( k<=(s.length()-(i+2*k)) && (s.length()-(i+2*k))<2*k ){
temp=new StringBuilder();
temp.append(s.substring(i+2*k,i+2*k+k));
result.append(temp.reverse().toString());
result.append(s.substring(i+2*k+k,s.length()));
break;
}
}
return result.toString();
}
}
···
热门相关:医门宗师 重生之男神追妻忙 傲天弃少 国民女神:重生王牌千金 神秘复苏