1332
题目
给你一个字符串 s,它仅由字母 ‘a’ 和 ‘b’ 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。
返回删除给定字符串中所有字符(字符串为空)的最小删除次数。
思路
如果该字符串是回文,返回1,不是回文,返回2;
代码
class Solution {
public int removePalindromeSub(String s) {
if(is(s)){
return 1;
}else{
return 2;
}
}
public static boolean is(String s){
int l=0;
int r=s.length()-1;
while(r>=l){
if(s.charAt(l)!=s.charAt(r)){
return false;
}
l++;
r--;
}
return true;
}
}
541
题目
给定一个字符串 s 和一个整数 k,从字符串开头算起,每计数至 2k 个字符,就反转这 2k 字符中的前 k 个字符。
如果剩余字符少于 k 个,则将剩余字符全部反转。
如果剩余字符小于 2k 但大于或等于 k 个,则反转前 k 个字符,其余字符保持原样。
思路
在整体循环中 i每次走2K,循环中调用reverse方法
代码
class Solution {
public String reverseStr(String s, int k) {
char[]arr=s.toCharArray();
int len=s.length();
for(int i=0;i<len;i=i+2*k){
reverse(arr,i,Math.min(i+k,len)-1);
}
return new String(arr);
}
public void reverse(char[]arr,int left,int right){
while(right>left){
char temp=arr[left];
arr[left]=arr[right];
arr[right]=temp;
left++;
right--;
}
}
}
1154
题目
给你一个字符串 date ,按 YYYY-MM-DD 格式表示一个 现行公元纪年法 日期。返回该日期是当年的第几天。
打表法~~
代码
class Solution {
public int dayOfYear(String date) {
String[]arr=date.split("-");
int year=Integer.parseInt(arr[0]);
int month=Integer.parseInt(arr[1]);
int day=Integer.parseInt(arr[2]);
int[]dayy=new int[13];
dayy[1]=31;
dayy[2]=28;
dayy[3]=31;
dayy[4]=30;
dayy[5]=31;
dayy[6]=30;
dayy[7]=31;
dayy[8]=31;
dayy[9]=30;
dayy[10]=31;
dayy[11]=30;
dayy[12]=31;
if(isLeap(year)){
dayy[2]=29;
}
int res=0;
for(int i=1;i<month;i++){
res=res+dayy[i];
}
res=res+day;
return res;
}
public boolean isLeap(int year){
if(year%100==0){
return year%400==0;
}
return year%4==0;
}
}
1051
题目
学校打算为全体学生拍一张年度纪念照。根据要求,学生需要按照 非递减 的高度顺序排成一行。
排序后的高度情况用整数数组 expected 表示,其中 expected[i] 是预计排在这一行中第 i 位的学生的高度(下标从 0 开始)。
给你一个整数数组 heights ,表示 当前学生站位 的高度情况。heights[i] 是这一行中第 i 位学生的高度(下标从 0 开始)。
返回满足 heights[i] != expected[i] 的 下标数量 。
思路
对比排序后和排序前位置不一样的个数
代码
class Solution {
public int heightChecker(int[] heights) {
int[]arr=Arrays.copyOfRange(heights,0,heights.length);
Arrays.sort(arr);
int count=0;
for(int i=0;i<heights.length;i++){
if(heights[i]!=arr[i]){
count++;
}
}
return count;
}
}