反转字符串II(541)
  FHUfYd9S4EP5 2024年08月08日 56 0

题目描述

给定一个字符串 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();
    }
}
···
【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2024年08月08日 0

暂无评论

推荐阅读
  FHUfYd9S4EP5   2天前   19   0   0 Java
  sSh3rBaiME5f   3天前   22   0   0 Java
  qCe06rFCa8NK   2天前   15   0   0 Java
  ZTo294hNoDcA   2天前   19   0   0 Java
  FHUfYd9S4EP5   2天前   16   0   0 Java
  QGiRIwDaZAe8   3天前   18   0   0 Java
FHUfYd9S4EP5