思路
简单的逻辑判断题,主要描述一下StringBuffer、String、char[]之间的转换和用法
题目描述
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
代码
StringBuffer详细用法
https://blog.csdn.net/weixin_43465312/article/details/102774653
String截取字符串用法
https://blog.csdn.net/qq_39445165/article/details/83651114
char数组转字符串
String s=new String(c);
package String;
import java.util.Scanner;
public class _541反转字符串2 {
public static String reverseStr(String s, int k) {
int len=s.length();
StringBuffer sb=new StringBuffer();
if(len<k) {
sb.append(reverseAll(s));
}else if(len<2*k) {
sb.append(reversek(s,k));
}else {
int sub_length=0;
for(int i=0;i<len;i=i+2*k) {
if(i+2*k<=len) {
String sub=s.substring(i,i+2*k);
// System.out.println(reversek(sub,k)+"cc");
sb.append(reversek(sub,k));
sub_length=i+2*k;
}
}
String ss=s.substring(sub_length,s.length());
// System.out.println(ss+"dd");
if(ss.length()<k) {
sb.append(reverseAll(ss));
}else {
sb.append(reversek(ss,k));
}
}
String ans=new String(sb);
//System.out.println(ans);
return ans;
}
//反转全部字符
public static String reverseAll(String s) {
char c[]=s.toCharArray();
int len=c.length;
int count=len/2;
for(int i=0;i<count;i++) {
char t=c[i];
c[i]=c[len-1-i];
c[len-1-i]=t;
}
return new String(c);
}
//反转前k个字符,其余保持原样
public static String reversek(String s,int k) {
char c[]=s.toCharArray();
int count=k/2;
for(int i=0;i<count;i++) {
char t=c[i];
c[i]=c[k-1-i];
c[k-1-i]=t;
}
return new String(c);
}
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()) {
String s=sc.next();
int k=sc.nextInt();
String ss=reverseStr(s,k);
//System.out.println(ss);
}
}
}
总结
字符串的一些基本用法