题目一:反转字符串
给定一个字符串 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;
}
}