反转字符串
程序员文章站
2022-05-21 08:19:41
...
package com.beantechs.cpsp.online.controller.voilation;
/**
* @Author:刘赵强
* @Date:2021/8/20 14:04
* @Description: 给定一个字符串 s 和一个整数 k,从字符串开头算起,每 2k 个字符反转前 k 个字符。
* <p>
* 如果剩余字符少于 k 个,则将剩余字符全部反转。
* 如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
* <p>
* <p>
* <p>
* 来源:力扣(LeetCode)
* 链接:https://leetcode-cn.com/problems/reverse-string-ii
* 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
**/
public class Demo3 {
public static void main(String[] args) {
System.out.println(reverseStr("abcdefg",2));
}
public static String reverseStr(String s, int k) {
int n = s.length();
char[] arr = s.toCharArray();
for (int i = 0; i < n; i += 2 * k) {
reverse(arr, i, Math.min(i + k, n) - 1);
}
return new String(arr);
}
public static void reverse(char[] arr, int left, int right) {
while (left < right) {
char temp = arr[left];
arr[left] = arr[right];
arr[right] = temp;
left++;
right--;
}
}
public static String reverseStr2(String str, int k) {
int count = str.length()/(2*k);
StringBuilder sb = new StringBuilder(str.length());
for (int i = 0; i < count; i++) {
String strGroup = str.substring(2*k*i,2*k*(i+1));
System.out.println(strGroup);
String str1 = strGroup.substring(0,k);
System.out.println("str1=="+str1);
String str2 = strGroup.substring(k);
System.out.println("str2=="+str2);
sb.append(reverse(str1)).append(str2);
}
String suffix = str.substring(count*2*k);
if(suffix.length()>=k){
sb.append(reverse(suffix.substring(0,k)));
sb.append(suffix.substring(k));
}else{
sb.append(reverse(suffix));
}
return sb.toString();
}
/**
* 将str字符串反转
*
* @param str
* @return
*/
public static String reverse(String str) {
return new StringBuilder(str).reverse().toString();
}
}
上一篇: 力扣 1481. 不同整数的最少数目