反转字符串II(541)

dfj-blog 2024-08-08 08:09:00 阅读 65

题目描述

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

如果剩余字符少于 k 个,则将剩余字符全部反转。

如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。

解题思路

如果按照我们暴力解法的话我们肯定是想一个一个的for循环去遍历,其实这道题说了每次是以2k的进度往前跳跃的,我们可以每次以2k为单位向前移动,然后在做一些边界处理,整体代码不是很难理解,主要是要考虑好各种细节问题,这个你可以自己多尝试提交几次就可以不断的去完善

<code>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();

}

}

···



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。