Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit c520c5a

Browse files
feat: add solutions to lc problem: No.3406 (doocs#4461)
No.3406.Find the Lexicographically Largest String From the Box II
1 parent 297e28c commit c520c5a

File tree

7 files changed

+413
-6
lines changed

7 files changed

+413
-6
lines changed

‎solution/3400-3499/3406.Find the Lexicographically Largest String From the Box II/README.md‎

Lines changed: 139 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -88,25 +88,161 @@ tags:
8888
#### Python3
8989

9090
```python
91-
91+
class Solution:
92+
def answerString(self, word: str, numFriends: int) -> str:
93+
if numFriends == 1:
94+
return word
95+
s = self.lastSubstring(word)
96+
return s[: len(word) - numFriends + 1]
97+
98+
def lastSubstring(self, s: str) -> str:
99+
i, j, k = 0, 1, 0
100+
while j + k < len(s):
101+
if s[i + k] == s[j + k]:
102+
k += 1
103+
elif s[i + k] < s[j + k]:
104+
i += k + 1
105+
k = 0
106+
if i >= j:
107+
j = i + 1
108+
else:
109+
j += k + 1
110+
k = 0
111+
return s[i:]
92112
```
93113

94114
#### Java
95115

96116
```java
97-
117+
class Solution {
118+
public String answerString(String word, int numFriends) {
119+
if (numFriends == 1) {
120+
return word;
121+
}
122+
String s = lastSubstring(word);
123+
return s.substring(0, Math.min(s.length(), word.length() - numFriends + 1));
124+
}
125+
126+
public String lastSubstring(String s) {
127+
int n = s.length();
128+
int i = 0, j = 1, k = 0;
129+
while (j + k < n) {
130+
int d = s.charAt(i + k) - s.charAt(j + k);
131+
if (d == 0) {
132+
++k;
133+
} else if (d < 0) {
134+
i += k + 1;
135+
k = 0;
136+
if (i >= j) {
137+
j = i + 1;
138+
}
139+
} else {
140+
j += k + 1;
141+
k = 0;
142+
}
143+
}
144+
return s.substring(i);
145+
}
146+
}
98147
```
99148

100149
#### C++
101150

102151
```cpp
103-
152+
class Solution {
153+
public:
154+
string answerString(string word, int numFriends) {
155+
if (numFriends == 1) {
156+
return word;
157+
}
158+
string s = lastSubstring(word);
159+
return s.substr(0, min(s.length(), word.length() - numFriends + 1));
160+
}
161+
162+
string lastSubstring(string& s) {
163+
int n = s.size();
164+
int i = 0, j = 1, k = 0;
165+
while (j + k < n) {
166+
if (s[i + k] == s[j + k]) {
167+
++k;
168+
} else if (s[i + k] < s[j + k]) {
169+
i += k + 1;
170+
k = 0;
171+
if (i >= j) {
172+
j = i + 1;
173+
}
174+
} else {
175+
j += k + 1;
176+
k = 0;
177+
}
178+
}
179+
return s.substr(i);
180+
}
181+
};
104182
```
105183

106184
#### Go
107185

108186
```go
187+
func answerString(word string, numFriends int) string {
188+
if numFriends == 1 {
189+
return word
190+
}
191+
s := lastSubstring(word)
192+
return s[:min(len(s), len(word)-numFriends+1)]
193+
}
194+
195+
func lastSubstring(s string) string {
196+
n := len(s)
197+
i, j, k := 0, 1, 0
198+
for j+k < n {
199+
if s[i+k] == s[j+k] {
200+
k++
201+
} else if s[i+k] < s[j+k] {
202+
i += k + 1
203+
k = 0
204+
if i >= j {
205+
j = i + 1
206+
}
207+
} else {
208+
j += k + 1
209+
k = 0
210+
}
211+
}
212+
return s[i:]
213+
}
214+
```
109215

216+
#### TypeScript
217+
218+
```ts
219+
function answerString(word: string, numFriends: number): string {
220+
if (numFriends === 1) {
221+
return word;
222+
}
223+
const s = lastSubstring(word);
224+
return s.slice(0, word.length - numFriends + 1);
225+
}
226+
227+
function lastSubstring(s: string): string {
228+
const n = s.length;
229+
let i = 0;
230+
for (let j = 1, k = 0; j + k < n; ) {
231+
if (s[i + k] === s[j + k]) {
232+
++k;
233+
} else if (s[i + k] < s[j + k]) {
234+
i += k + 1;
235+
k = 0;
236+
if (i >= j) {
237+
j = i + 1;
238+
}
239+
} else {
240+
j += k + 1;
241+
k = 0;
242+
}
243+
}
244+
return s.slice(i);
245+
}
110246
```
111247

112248
<!-- tabs:end -->

‎solution/3400-3499/3406.Find the Lexicographically Largest String From the Box II/README_EN.md‎

Lines changed: 139 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -84,25 +84,161 @@ If the first <code>min(a.length, b.length)</code> characters do not differ, then
8484
#### Python3
8585

8686
```python
87-
87+
class Solution:
88+
def answerString(self, word: str, numFriends: int) -> str:
89+
if numFriends == 1:
90+
return word
91+
s = self.lastSubstring(word)
92+
return s[: len(word) - numFriends + 1]
93+
94+
def lastSubstring(self, s: str) -> str:
95+
i, j, k = 0, 1, 0
96+
while j + k < len(s):
97+
if s[i + k] == s[j + k]:
98+
k += 1
99+
elif s[i + k] < s[j + k]:
100+
i += k + 1
101+
k = 0
102+
if i >= j:
103+
j = i + 1
104+
else:
105+
j += k + 1
106+
k = 0
107+
return s[i:]
88108
```
89109

90110
#### Java
91111

92112
```java
93-
113+
class Solution {
114+
public String answerString(String word, int numFriends) {
115+
if (numFriends == 1) {
116+
return word;
117+
}
118+
String s = lastSubstring(word);
119+
return s.substring(0, Math.min(s.length(), word.length() - numFriends + 1));
120+
}
121+
122+
public String lastSubstring(String s) {
123+
int n = s.length();
124+
int i = 0, j = 1, k = 0;
125+
while (j + k < n) {
126+
int d = s.charAt(i + k) - s.charAt(j + k);
127+
if (d == 0) {
128+
++k;
129+
} else if (d < 0) {
130+
i += k + 1;
131+
k = 0;
132+
if (i >= j) {
133+
j = i + 1;
134+
}
135+
} else {
136+
j += k + 1;
137+
k = 0;
138+
}
139+
}
140+
return s.substring(i);
141+
}
142+
}
94143
```
95144

96145
#### C++
97146

98147
```cpp
99-
148+
class Solution {
149+
public:
150+
string answerString(string word, int numFriends) {
151+
if (numFriends == 1) {
152+
return word;
153+
}
154+
string s = lastSubstring(word);
155+
return s.substr(0, min(s.length(), word.length() - numFriends + 1));
156+
}
157+
158+
string lastSubstring(string& s) {
159+
int n = s.size();
160+
int i = 0, j = 1, k = 0;
161+
while (j + k < n) {
162+
if (s[i + k] == s[j + k]) {
163+
++k;
164+
} else if (s[i + k] < s[j + k]) {
165+
i += k + 1;
166+
k = 0;
167+
if (i >= j) {
168+
j = i + 1;
169+
}
170+
} else {
171+
j += k + 1;
172+
k = 0;
173+
}
174+
}
175+
return s.substr(i);
176+
}
177+
};
100178
```
101179

102180
#### Go
103181

104182
```go
183+
func answerString(word string, numFriends int) string {
184+
if numFriends == 1 {
185+
return word
186+
}
187+
s := lastSubstring(word)
188+
return s[:min(len(s), len(word)-numFriends+1)]
189+
}
190+
191+
func lastSubstring(s string) string {
192+
n := len(s)
193+
i, j, k := 0, 1, 0
194+
for j+k < n {
195+
if s[i+k] == s[j+k] {
196+
k++
197+
} else if s[i+k] < s[j+k] {
198+
i += k + 1
199+
k = 0
200+
if i >= j {
201+
j = i + 1
202+
}
203+
} else {
204+
j += k + 1
205+
k = 0
206+
}
207+
}
208+
return s[i:]
209+
}
210+
```
105211

212+
#### TypeScript
213+
214+
```ts
215+
function answerString(word: string, numFriends: number): string {
216+
if (numFriends === 1) {
217+
return word;
218+
}
219+
const s = lastSubstring(word);
220+
return s.slice(0, word.length - numFriends + 1);
221+
}
222+
223+
function lastSubstring(s: string): string {
224+
const n = s.length;
225+
let i = 0;
226+
for (let j = 1, k = 0; j + k < n; ) {
227+
if (s[i + k] === s[j + k]) {
228+
++k;
229+
} else if (s[i + k] < s[j + k]) {
230+
i += k + 1;
231+
k = 0;
232+
if (i >= j) {
233+
j = i + 1;
234+
}
235+
} else {
236+
j += k + 1;
237+
k = 0;
238+
}
239+
}
240+
return s.slice(i);
241+
}
106242
```
107243

108244
<!-- tabs:end -->
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
class Solution {
2+
public:
3+
string answerString(string word, int numFriends) {
4+
if (numFriends == 1) {
5+
return word;
6+
}
7+
string s = lastSubstring(word);
8+
return s.substr(0, min(s.length(), word.length() - numFriends + 1));
9+
}
10+
11+
string lastSubstring(string& s) {
12+
int n = s.size();
13+
int i = 0, j = 1, k = 0;
14+
while (j + k < n) {
15+
if (s[i + k] == s[j + k]) {
16+
++k;
17+
} else if (s[i + k] < s[j + k]) {
18+
i += k + 1;
19+
k = 0;
20+
if (i >= j) {
21+
j = i + 1;
22+
}
23+
} else {
24+
j += k + 1;
25+
k = 0;
26+
}
27+
}
28+
return s.substr(i);
29+
}
30+
};
Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
func answerString(word string, numFriends int) string {
2+
if numFriends == 1 {
3+
return word
4+
}
5+
s := lastSubstring(word)
6+
return s[:min(len(s), len(word)-numFriends+1)]
7+
}
8+
9+
func lastSubstring(s string) string {
10+
n := len(s)
11+
i, j, k := 0, 1, 0
12+
for j+k < n {
13+
if s[i+k] == s[j+k] {
14+
k++
15+
} else if s[i+k] < s[j+k] {
16+
i += k + 1
17+
k = 0
18+
if i >= j {
19+
j = i + 1
20+
}
21+
} else {
22+
j += k + 1
23+
k = 0
24+
}
25+
}
26+
return s[i:]
27+
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /