给你一个字符串数组 words
和一个字符串 pref
。
返回 words
中以 pref
作为 前缀 的字符串的数目。
字符串 s
的 前缀 就是 s
的任一前导连续字符串。
class Solution {
public int prefixCount(String[] words, String pref) {
int ans=0;
for(String i:words){
if(j(i,pref)){
ans++;
}
}
return ans;
}
public boolean j(String a,String b){
for(int i=0;i<b.length();i++){
if(i>=a.length()||a.charAt(i)!=b.charAt(i)){
return false;
}
}
return true;
}
}
给你两个字符串 s
和 t
。在一步操作中,你可以给 s
或者 t
追加 任一字符 。
返回使 s
和 t
互为 字母异位词 所需的最少步骤数*。*
字母异位词 指字母相同但是顺序不同(或者相同)的字符串。
class Solution {
public int minSteps(String s, String t) {
if(s.equals(t)){
return 0;
}
int[] count=new int[26];
for(char i:s.toCharArray()){
count[(int)(i-'a')]++;
}
for(char i:t.toCharArray()){
count[(int)(i-'a')]--;
}
int ans=0;
for(int i:count){
ans+=(int)Math.abs(i);
}
return ans;
}
}
给你一个数组 time
,其中 time[i]
表示第 i
辆公交车完成 一趟****旅途 所需要花费的时间。
每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。每辆公交车 独立 运行,也就是说可以同时有多辆公交车在运行且互不影响。
给你一个整数 totalTrips
,表示所有公交车 总共 需要完成的旅途数目。请你返回完成 至少 totalTrips
趟旅途需要花费的 最少 时间。
class Solution {
public long minimumTime(int[] time, int totalTrips) {
int t=totalTrips;
Arrays.sort(time);
long r=(long)time[0]*t;
long l=0;
while(l<r){
long mid=(r-l)/2+l;
if(judge(time,mid,t)){
r=mid;
}
else{
l=mid+1;
}
}
return l;
}
public boolean judge(int[] time,long T,int t){
int res=0;
for(int i=0;i<time.length;i++){
res+=(int)(T/time[i]);
if(res>=t){
return true;
}
}
return false;
}
}
给你一个下标从 0 开始的二维整数数组 tires
,其中 tires[i] = [fi, ri]
表示第 i
种轮胎如果连续使用,第 x
圈需要耗时 fi * ri(x-1)
秒。
- 比方说,如果
fi = 3
且 ri = 2
,且一直使用这种类型的同一条轮胎,那么该轮胎完成第 1
圈赛道耗时 3
秒,完成第 2
圈耗时 3 * 2 = 6
秒,完成第 3
圈耗时 3 * 22 = 12
秒,依次类推。
同时给你一个整数 changeTime
和一个整数 numLaps
。
比赛总共包含 numLaps
圈,你可以选择 任意 一种轮胎开始比赛。每一种轮胎都有 无数条 。每一圈后,你可以选择耗费 changeTime
秒 换成 任意一种轮胎(也可以换成当前种类的新轮胎)。
请你返回完成比赛需要耗费的 最少 时间。
class Solution {
public int minimumFinishTime(int[][] tires, int changeTime, int numLaps) {
int[] min=new int[numLaps+1];
for(int i=1;i<=numLaps;i++){
min[i]=Integer.MAX_VALUE;
for(int k=0;k<tires.length;k++){
if(tires[k][0]!=-1){
long f=(long)tires[k][0];
long r=(long)tires[k][1];
long sum=f*(1-(long)Math.pow(r,i))/(1-r);
if(sum<min[i]){
min[i]=(int)sum;
}
else if(sum>=Integer.MAX_VALUE){
tires[k][0]=-1;
}
}
}
}
for(int i=1;i<=numLaps;i++){
for(int k=1;k<=i-k;k++){
min[i]=Math.min(min[k]+min[i-k]+changeTime,min[i]);
}
}
// for(int i=1;i<=numLaps;i++){
// System.out.println(min[i]);
// }
return min[numLaps];
}
}
结尾
题目来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems
⭐️关注作者,带你刷题,从简单的算法题了解最常用的算法技能(寒假每日一题)
⭐️关注作者刷题——简单到进阶,让你不知不觉成为无情的刷题机器,有问题请私信