LeetCode 题解工作台

从盒子中找出字典序最大的字符串 I

给你一个字符串 word 和一个整数 numFriends 。 Alice 正在为她的 numFriends 位朋友组织一个游戏。游戏分为多个回合,在每一回合中: word 被分割成 numFriends 个 非空 字符串,且该分割方式与之前的任意回合所采用的都 不完全相同 。 所有分割出的字符串都…

category

3

题型

code_blocks

5

代码语言

hub

3

相关题

当前训练重点

中等 · 双·指针·invariant

bolt

答案摘要

如果我们固定子字符串的左端点,那么子字符串越长,字典序越大。假设子字符串左端点为 ,剩余子字符串的最小长度为 $\text{numFriends} - 1$,那么子字符串的右端点可以取到 $\min(n, i + n - (\text{numFriends} - 1))$,其中 为字符串的长度。注意我们说的是左开右闭。 我们枚举所有可能的左端点,取出对应的子字符串,比较字典序,最终得到字典序最大…

Interview AiBox logo

Interview AiBox 实时 AI 助手,陪你讲清 双·指针·invariant 题型思路

试试 AiBox 面试助手arrow_forward
description

题目描述

给你一个字符串 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 * 103
  • word 仅由小写英文字母组成。
  • 1 <= numFriends <= word.length
lightbulb

解题思路

方法一:枚举子串左端点

如果我们固定子字符串的左端点,那么子字符串越长,字典序越大。假设子字符串左端点为 ii,剩余子字符串的最小长度为 numFriends1\text{numFriends} - 1,那么子字符串的右端点可以取到 min(n,i+n(numFriends1))\min(n, i + n - (\text{numFriends} - 1)),其中 nn 为字符串的长度。注意我们说的是左开右闭。

我们枚举所有可能的左端点,取出对应的子字符串,比较字典序,最终得到字典序最大的子字符串。

时间复杂度 O(n2)O(n^2),空间复杂度 O(n)O(n)。其中 nn 为字符串的长度。

1
2
3
4
5
6
7
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))
speed

复杂度分析

指标
时间O(n)
空间O(n)
psychology

面试官常问的追问

外企场景
  • 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.

warning

常见陷阱

外企场景
  • 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.

swap_horiz

进阶变体

外企场景
  • 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.

help

常见问题

外企场景

从盒子中找出字典序最大的字符串 I题解:双·指针·invariant | LeetCode #3403 中等