算法刷题2

题目一:反转字符串
给定一个字符串 s 和一个整数 k,你需要对从字符串开头算起的每隔 2k 个字符的前 k 个字符进行反转。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
也就是说每隔k个需要反转k个,末尾不够k个时需要全部反转;

class Solution {
    public String reverseStr(String s, int k) {
    char[] a=s.toCharArray();
    for(int start=0;start<a.length;start+=2*k){
     int i=start,j=Math.min(start+k-1,a.length-1);
     while(i<j){
         char tmp=a[i];
         a[i++]=a[j];
         a[j--]=tmp;
     }
    }
    return new String(a);
    }
}

题目二: 学生出勤记录 I
给定一个字符串来代表一个学生的出勤记录,这个记录仅包含以下三个字符:
‘A’ : Absent,缺勤
‘L’ : Late,迟到
‘P’ : Present,到场
如果一个学生的出勤记录中不超过一个’A’(缺勤)并且不超过两个连续的’L’(迟到),那么这个学生会被奖赏。
你需要根据这个学生的出勤记录判断他是否会被奖赏。


class Solution {
    public boolean checkRecord(String s) {
    if(s.indexOf('A')!=s.lastIndexOf('A')){
        return false;
    }
    if(s.contains("LLL")){
        return false;
    }
    return true;
    }
}

题目三:拿硬币
桌上有 n 堆力扣币,每堆的数量保存在数组 coins 中。我们每次可以选择任意一堆,拿走其中的一枚或者两枚,求拿完所有力扣币的最少次数。

class Solution {
    public int minCount(int[] coins) {
        int res=0;
    for(int coin:coins){
        res=res+(coin+1)/2;
    }
    return res;
    }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值