LeetCode541. 反转字符串 II

亦凉 2022-05-08 06:42 281阅读 0赞

给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于 k 个字符,则反转前 k 个字符,并将剩余的字符保持原样。

示例:

  1. 输入: s = "abcdefg", k = 2
  2. 输出: "bacdfeg"

要求:

  1. 该字符串只包含小写的英文字母。
  2. 给定字符串的长度和 k 在[1, 10000]范围内。

思路:len为s字符串的长度,将s字符串按每个字符串长度等于2*k分为n段,如果剩下最后一段字符长度小于2*k,另做处理。将这n段字符串按要求反转(反转前k个字符),剩下的最后一段再进行反转。

  1. class Solution {
  2. public String reverseStr(String s, int k) {
  3. int len=s.length(); //字符串长度
  4. int count=len/(2*k); //每2*k为一段字符串,count是段数
  5. int remainder=len%(2*k);//s字符串中,每2*k为一段字符串,remainder是余下的字符串的长度
  6. char[] chars=s.toCharArray();
  7. //将s字符串中长度为2*k的前count段字符串子串按要求反转
  8. for(int i=0;i<len-remainder;i+=2*k){
  9. reverseCharArrays(chars,i,i+k-1);
  10. }
  11. //反转最后剩余的一段字符串
  12. if(remainder<k){
  13. //长度小于k,全部反转
  14. reverseCharArrays(chars,len-remainder,len-1);
  15. }else{
  16. //长度大于k,反转前k个字符即可
  17. reverseCharArrays(chars,len-remainder,len-remainder+k-1);
  18. }
  19. return new String(chars);
  20. }
  21. /**
  22. * 反转从startIndex到endIndex这一段字符数组
  23. * @param chars
  24. * @param startIndex
  25. * @param endIndex
  26. */
  27. public void reverseCharArrays(char[] chars,int startIndex,int endIndex){
  28. while(startIndex<endIndex){
  29. char tmp=chars[endIndex];
  30. chars[endIndex]=chars[startIndex];
  31. chars[startIndex]=tmp;
  32. startIndex++;
  33. endIndex--;
  34. }
  35. }
  36. }

发表评论

表情:
评论列表 (有 0 条评论,281人围观)

还没有评论,来说两句吧...

相关阅读

    相关 541. 字符串 II

    给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。 如果剩余字符少于 k 个,则将剩余字符全部反转。 如果剩余字符小于 2k 但大

    相关 LeetCode541. 字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于

    相关 541. 字符串 II

    给定一个字符串和一个整数 k,你需要对从字符串开头算起的每个 2k 个字符的前k个字符进行反转。如果剩余少于 k 个字符,则将剩余的所有全部反转。如果有小于 2k 但大于或等于