给你一个字符串 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 * 10^3
word
仅由小写英文字母组成。1 <= numFriends <= word.length
分析:可以直接枚举。当 numFriends=1 时,无法分割,返回 word。当 numFriends>1 时,对于以 i 为左端点的所有分割子字符串,长度越大字典序也越大,而在题目条件的约束下,这些分割子字符串的最大长度为 min(n−numFriends+1,n−i)。可以从 i=0 开始枚举左端点,然后取出对应的长度为 min(n−numFriends+1,n−i) 的子字符串,最后返回这些子字符串中字典序最大的字符串。
class Solution {
public:
string answerString(string word, int numFriends) {
if(numFriends==1)return word;
string ans;
for(int i=0;i<word.length();++i)
{
int len=min(i+word.length()-numFriends+1,word.length());
string temp;
for(int j=i;j<len;++j)
temp+=word[j];
if(temp>ans)ans=temp;
}
return ans;
}
};