统计包含给定前缀的字符串-遍历循环
题目描述
给你一个字符串数组 words 和一个字符串 pref 。
返回 words 中以 pref 作为 前缀 的字符串的数目。
字符串 s 的 前缀 就是 s 的任一前导连续字符串。
示例 1:
输入:words = ["pay","attention","practice","attend"], pref = "at"
输出:2
解释:以 "at" 作为前缀的字符串有两个,分别是:"attention" 和 "attend" 。
示例 2:
输入:words = ["leetcode","win","loops","success"], pref = "code"
输出:0
解释:不存在以 "code" 作为前缀的字符串。
提示:
- 1 <= words.length <= 100
- 1 <= words[i].length, pref.length <= 100
- words[i] 和 pref 由小写英文字母组成
题解思路
对于word中每个单词进行遍历的同时
判断pref是否与其相等
题解代码
class Solution:
def prefixCount(self, words: List[str], pref: str) -> int:
n=len(pref)
ans=0
for w in words:
if w[:n]==pref:
ans+=1
return ans
使两字符串互为字母异位词的最少步骤数-字典计数
题目描述
给你两个字符串 s 和 t 。在一步操作中,你可以给 s 或者 t 追加 任一字符 。
返回使 s 和 t 互为 字母异位词 所需的最少步骤数。
字母异位词 指字母相同但是顺序不同(或者相同)的字符串。
示例 1:
输入:s = "leetcode", t = "coats"
输出:7
解释:
- 执行 2 步操作,将 "as" 追加到 s = "leetcode" 中,得到 s = "leetcodeas" 。
- 执行 5 步操作,将 "leede" 追加到 t = "coats" 中,得到 t = "coatsleede" 。
"leetcodeas" 和 "coatsleede" 互为字母异位词。
总共用去 2 + 5 = 7 步。
可以证明,无法用少于 7 步操作使这两个字符串互为字母异位词。
示例 2:
输入:s = "night", t = "thing"
输出:0
解释:给出的字符串已经互为字母异位词。因此,不需要任何进一步操作。
提示:
- 1 <= s.length, t.length <= 2 * 105
- s 和 t 由小写英文字符组成
题解思路
统计 s 和 t 各个字母出现的频率
分别遍历s 和 t 并且判断其与另一个字符串所差的字母个数
将其累加即可得到结果
题解代码
class Solution:
def minSteps(self, s: str, t: str) -> int:
num1,num2=0,0
a,b=Counter(s),Counter(t)
for i in range(len(t)):
if t[i] in a and a[t[i]]>0:
a[t[i]]-=1
else:
num1+=1
for j in range(len(s)):
if s[j] in b and b[s[j]]>0:
b[s[j]]-=1
else:
num2+=1
return num1+num2
完成旅途的最少时间-二分查找
题目描述
给你一个数组 time ,其中 time[i] 表示第 i 辆公交车完成 一趟旅途 所需要花费的时间。
每辆公交车可以 连续 完成多趟旅途,也就是说,一辆公交车当前旅途完成后,可以 立马开始 下一趟旅途。每辆公交车 独立 运行,也就是说可以同时有多辆公交车在运行且互不影响。
给你一个整数 totalTrips ,表示所有公交车 总共 需要完成的旅途数目。请你返回完成 至少 totalTrips 趟旅途需要花费的 最少 时间。
示例 1:
输入:time = [1,2,3], totalTrips = 5
输出:3
解释:
- 时刻 t = 1 ,每辆公交车完成的旅途数分别为 [1,0,0] 。
已完成的总旅途数为 1 + 0 + 0 = 1 。
- 时刻 t = 2 ,每辆公交车完成的旅途数分别为 [2,1,0] 。
已完成的总旅途数为 2 + 1 + 0 = 3 。
- 时刻 t = 3 ,每辆公交车完成的旅途数分别为 [3,1,1] 。
已完成的总旅途数为 3 + 1 + 1 = 5 。
所以总共完成至少 5 趟旅途的最少时间为 3 。
示例 2:
输入:time = [2], totalTrips = 1
输出:2
解释:
只有一辆公交车,它将在时刻 t = 2 完成第一趟旅途。
所以完成 1 趟旅途的最少时间为 2 。
提示:
- 1 <= time.length <= 105
- 1 <= time[i], totalTrips <= 107
题解思路
找到time中最大值
给定上下限 分别为 0 和 max(time)*totalTrips
在这个时间段内进行二分查找 找到答案
题解代码
class Solution:
def minimumTime(self, time: List[int], totalTrips: int) -> int:
min_time,max_time=0,max(time)*totalTrips
while min_time<=max_time:
mid=(min_time+max_time)//2
sum_trip=sum(mid//c for c in time)
if sum_trip>=totalTrips:
max_time=mid-1
else:
min_time=mid+1
return min_time
|