LeetCode 题解工作台
从盒子中找出字典序最大的字符串 I
给你一个字符串 word 和一个整数 numFriends 。 Alice 正在为她的 numFriends 位朋友组织一个游戏。游戏分为多个回合,在每一回合中: word 被分割成 numFriends 个 非空 字符串,且该分割方式与之前的任意回合所采用的都 不完全相同 。 所有分割出的字符串都…
3
题型
5
代码语言
3
相关题
当前训练重点
中等 · 双·指针·invariant
答案摘要
如果我们固定子字符串的左端点,那么子字符串越长,字典序越大。假设子字符串左端点为 ,剩余子字符串的最小长度为 $\text{numFriends} - 1$,那么子字符串的右端点可以取到 $\min(n, i + n - (\text{numFriends} - 1))$,其中 为字符串的长度。注意我们说的是左开右闭。 我们枚举所有可能的左端点,取出对应的子字符串,比较字典序,最终得到字典序最大…
Interview AiBoxInterview AiBox 实时 AI 助手,陪你讲清 双·指针·invariant 题型思路
题目描述
给你一个字符串 word 和一个整数 numFriends。
Alice 正在为她的 numFriends 位朋友组织一个游戏。游戏分为多个回合,在每一回合中:
word被分割成numFriends个 非空 字符串,且该分割方式与之前的任意回合所采用的都 不完全相同 。- 所有分割出的字符串都会被放入一个盒子中。
在所有回合结束后,找出盒子中 字典序最大的 字符串。
示例 1:
输入: word = "dbca", numFriends = 2
输出: "dbc"
解释:
所有可能的分割方式为:
"d"和"bca"。"db"和"ca"。"dbc"和"a"。
示例 2:
输入: word = "gggg", numFriends = 4
输出: "g"
解释:
唯一可能的分割方式为:"g", "g", "g", 和 "g"。
提示:
1 <= word.length <= 5 * 103word仅由小写英文字母组成。1 <= numFriends <= word.length
解题思路
方法一:枚举子串左端点
如果我们固定子字符串的左端点,那么子字符串越长,字典序越大。假设子字符串左端点为 ,剩余子字符串的最小长度为 ,那么子字符串的右端点可以取到 ,其中 为字符串的长度。注意我们说的是左开右闭。
我们枚举所有可能的左端点,取出对应的子字符串,比较字典序,最终得到字典序最大的子字符串。
时间复杂度 ,空间复杂度 。其中 为字符串的长度。
class Solution:
def answerString(self, word: str, numFriends: int) -> str:
if numFriends == 1:
return word
n = len(word)
return max(word[i : i + n - (numFriends - 1)] for i in range(n))
复杂度分析
| 指标 | 值 |
|---|---|
| 时间 | O(n) |
| 空间 | O(n) |
面试官常问的追问
外企场景- question_mark
Candidate demonstrates knowledge of two-pointer techniques.
- question_mark
Candidate efficiently handles lexicographical comparisons in string processing.
- question_mark
Candidate applies constraints like `numFriends` and substring lengths effectively in their solution.
常见陷阱
外企场景- error
Not maintaining the invariant of lexicographical order.
- error
Incorrectly calculating the valid range for substring lengths.
- error
Failing to optimize the solution for time complexity with large inputs.
进阶变体
外企场景- arrow_right_alt
Using a sliding window technique instead of two pointers.
- arrow_right_alt
Considering edge cases where `numFriends` is close to the length of the word.
- arrow_right_alt
Optimizing the solution with a stack-based approach for larger inputs.