5722. 截斷句子
https://leetcode-cn.com/problems/truncate-sentence/
難度:簡單
題目:
句子 是一個單詞列表,列表中的單詞之間用單個空格隔開用踩,且不存在前導(dǎo)或尾隨空格。每個單詞僅由大小寫英文字母組成(不含標(biāo)點符號)叨粘。
例如遣总,"Hello World"、"HELLO" 和 "hello world hello world" 都是句子。
給你一個句子 s 和一個整數(shù) k 揽惹,請你將 s 截斷 ,使截斷后的句子僅含 前 k個單詞四康。返回 截斷 s 后得到的句子搪搏。
示例:
示例 1:
輸入:s = "Hello how are you Contestant", k = 4
輸出:"Hello how are you"
解釋:
s 中的單詞為 ["Hello", "how" "are", "you", "Contestant"]
前 4 個單詞為 ["Hello", "how", "are", "you"]
因此,應(yīng)當(dāng)返回 "Hello how are you"
示例 2:
輸入:s = "What is the solution to this problem", k = 4
輸出:"What is the solution"
解釋:
s 中的單詞為 ["What", "is" "the", "solution", "to", "this", "problem"]
前 4 個單詞為 ["What", "is", "the", "solution"]
因此闪金,應(yīng)當(dāng)返回 "What is the solution"
示例 3:
輸入:s = "chopper is not a tanuki", k = 5
輸出:"chopper is not a tanuki"
分析
這種字符串截斷的問題疯溺,就是python的最愛!
解題:
class Solution:
def truncateSentence(self, s, k):
list_s = s.split()
return ' '.join(list_s[:min(k, len(list_s))])
5723. 查找用戶活躍分鐘數(shù)
https://leetcode-cn.com/problems/finding-the-users-active-minutes/
難度:中等
題目:
給你用戶在 LeetCode 的操作日志哎垦,和一個整數(shù) k 囱嫩。日志用一個二維整數(shù)數(shù)組 logs 表示,其中每個 logs[i] = [IDi, timei] 表示 ID 為 IDi 的用戶在 timei 分鐘時執(zhí)行了某個操作漏设。
多個用戶 可以同時執(zhí)行操作墨闲,單個用戶可以在同一分鐘內(nèi)執(zhí)行 多個操作 。
指定用戶的 用戶活躍分鐘數(shù)(user active minutes郑口,UAM) 定義為用戶對 LeetCode 執(zhí)行操作的 唯一分鐘數(shù) 鸳碧。 即使一分鐘內(nèi)執(zhí)行多個操作,也只能按一分鐘計數(shù)犬性。
請你統(tǒng)計用戶活躍分鐘數(shù)的分布情況瞻离,統(tǒng)計結(jié)果是一個長度為 k 且 下標(biāo)從 1 開始計數(shù) 的數(shù)組 answer ,對于每個 j(1 <= j <= k)乒裆,answer[j] 表示 用戶活躍分鐘數(shù) 等于 j 的用戶數(shù)套利。
返回上面描述的答案數(shù)組 answer 。
示例:
示例 1:
輸入:logs = [[0,5],[1,2],[0,2],[0,5],[1,3]], k = 5
輸出:[0,2,0,0,0]
解釋:
ID=0 的用戶執(zhí)行操作的分鐘分別是:5 、2 和 5 日裙。因此吹艇,該用戶的用戶活躍分鐘數(shù)為 2(分鐘 5 只計數(shù)一次)
ID=1 的用戶執(zhí)行操作的分鐘分別是:2 和 3 。因此昂拂,該用戶的用戶活躍分鐘數(shù)為 2
2 個用戶的用戶活躍分鐘數(shù)都是 2 受神,answer[2] 為 2 ,其余 answer[j] 的值都是 0
示例 2:
輸入:logs = [[1,1],[2,2],[2,3]], k = 4
輸出:[1,1,0,0]
解釋:
ID=1 的用戶僅在分鐘 1 執(zhí)行單個操作格侯。因此鼻听,該用戶的用戶活躍分鐘數(shù)為 1
ID=2 的用戶執(zhí)行操作的分鐘分別是:2 和 3 。因此联四,該用戶的用戶活躍分鐘數(shù)為 2
1 個用戶的用戶活躍分鐘數(shù)是 1 撑碴,1 個用戶的用戶活躍分鐘數(shù)是 2
因此,answer[1] = 1 朝墩,answer[2] = 1 醉拓,其余的值都是 0
分析
題目解釋稍微有點繞,但仔細(xì)看會比較好理解收苏。
- 首先創(chuàng)建一個長度為K的全零列表ret.
- 維護(hù)一個哈希表亿卤,其中每個value值使用集合的數(shù)據(jù)類型。
- 遍歷logs鹿霸,查找到所有以用戶id為key排吴,且該用戶活躍在不重復(fù)的分鐘數(shù)內(nèi)的set集合
- 循環(huán)檢索哈希表的values值,將每個values值得長度+1作為ret的index執(zhí)行+=1的操作即可
- 這里注意由于分鐘數(shù)是以1位開頭的懦鼠,所有l(wèi)en(values)需要-1
解題:
class Solution:
def findingUsersActiveMinutes(self, logs, k):
ret = [0 for _ in range(k)]
d = {}
for i in logs:
id, time = i
if id not in d:
d[id] = {time, }
else:
d[id].add(time)
for j in d.values():
count = len(j)
if count <= k:
ret[count - 1] += 1
return ret
5706. 句子相似性 III
https://leetcode-cn.com/problems/sentence-similarity-iii/
難度:中等
題目:
一個句子是由一些單詞與它們之間的單個空格組成钻哩,且句子的開頭和結(jié)尾沒有多余空格。比方說肛冶,"Hello World"街氢,"HELLO",
"hello world hello world"都是句子淑趾。每個單詞都 只包含大寫和小寫英文字母阳仔。
如果兩個句子sentence1 和sentence2,可以通過往其中一個句子插入一個任意的句子(可以是空句子)而得到另一個句子扣泊,
那么我們稱這兩個句子是 相似的近范。比方說,sentence1 = "Hello my name is Jane" 且sentence2 = "Hello Jane"延蟹,
我們可以往 sentence2中"Hello" 和"Jane"之間插入"my name is"得到 sentence1评矩。
給你兩個句子sentence1 和sentence2,如果sentence1 和sentence2 是相似的阱飘,請你返回true斥杜,否則返回false虱颗。
示例:
示例 1:
輸入:sentence1 = "My name is Haley", sentence2 = "My Haley"
輸出:true
解釋:可以往 sentence2 中 "My" 和 "Haley" 之間插入 "name is" ,得到 sentence1 蔗喂。
示例 2:
輸入:sentence1 = "of", sentence2 = "A lot of words"
輸出:false
解釋:沒法往這兩個句子中的一個句子只插入一個句子就得到另一個句子忘渔。
示例 3:
輸入:sentence1 = "Eating right now", sentence2 = "Eating"
輸出:true
解釋:可以往 sentence2 的結(jié)尾插入 "right now" 得到 sentence1 。
示例 4:
輸入:sentence1 = "Luky", sentence2 = "Lucccky"
輸出:false
分析
比賽的時候雖然通過了缰儿,但寫了一堆if else的邏輯沒有好好考慮場景畦粮。
晚上又畫圖仔細(xì)分析了下,感覺當(dāng)時想太多了乖阵,就只有三種情況而已...
- 左匹配 左指針移動的總和 等于 被比較的數(shù)字
- 右匹配 右指針移動的總和 等于 被比較的數(shù)字
- 兩端匹配 兩端指針移動的總和 等于 被比較的數(shù)字
解題:
class Solution:
def areSentencesSimilar(self, sentence1, sentence2):
# 判斷base與compare,base為總長句子宣赔,compare為待插入的句子
base, comp = sentence1.split(), sentence2.split()
if len(base) < len(comp):
base, comp = comp, base
# 先判斷做匹配
i = 0
while i < len(comp) and base[i] == comp[i]:
i += 1
if i == len(comp):
return True
# 再判斷右匹配
j = 0
while j >= 0 and base[len(base) - j - 1] == comp[len(comp) - j - 1]:
j += 1
# 同時判斷兩端匹配
if j == len(comp) or i + j == len(comp):
return True
# 其他場景都是錯誤的
return False
歡迎關(guān)注我的公眾號: 清風(fēng)Python,帶你每日學(xué)習(xí)Python算法刷題的同時瞪浸,了解更多python小知識儒将。
有喜歡力扣刷題的小伙伴可以加我微信(King_Uranus)互相鼓勵,共同進(jìn)步对蒲,一起玩轉(zhuǎn)超級碼力钩蚊!
我的個人博客:https://qingfengpython.cn