day8 leetcode541反转字符串

思路

简单的逻辑判断题,主要描述一下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);
		}

	}

}

总结

字符串的一些基本用法

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值