LeetCode-in-Java

3403. Find the Lexicographically Largest String From the Box I

Medium

You are given a string word, and an integer numFriends.

Alice is organizing a game for her numFriends friends. There are multiple rounds in the game, where in each round:

Find the lexicographically largest string from the box after all the rounds are finished.

A string a is lexicographically smaller than a string b if in the first position where a and b differ, string a has a letter that appears earlier in the alphabet than the corresponding letter in b.
If the first min(a.length, b.length) characters do not differ, then the shorter string is the lexicographically smaller one.

Example 1:

Input: word = “dbca”, numFriends = 2

Output: “dbc”

Explanation:

All possible splits are:

Example 2:

Input: word = “gggg”, numFriends = 4

Output: “g”

Explanation:

The only possible split is: "g", "g", "g", and "g".

Constraints:

Solution

public class Solution {
    public String answerString(String word, int numFriends) {
        if (numFriends == 1) {
            return word;
        }
        int n = word.length();
        int maxlen = n - numFriends + 1;
        char maxchar = word.charAt(0);
        String res = "";
        for (int i = 0; i < n; i++) {
            if (word.charAt(i) >= maxchar) {
                String curr = word.substring(i, Math.min(i + maxlen, n));
                if (curr.compareTo(res) > 0) {
                    res = curr;
                }
                maxchar = word.charAt(i);
            }
        }
        return res;
    }
}