Skip to content

Commit a62a362

Browse files
committed
feat: add solutions to lc problem: No.0899
No.0899.Orderly Queue
1 parent a461c80 commit a62a362

File tree

6 files changed

+204
-2
lines changed

6 files changed

+204
-2
lines changed

solution/0800-0899/0899.Orderly Queue/README.md

Lines changed: 79 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,22 +45,100 @@
4545

4646
<!-- 这里可写通用的实现逻辑 -->
4747

48+
**前言**
49+
50+
对于任何字符串,如果可以交换任意相邻字符,则可以对字符串中的字符做类似冒泡排序的操作,最终得到一个升序排列的字符串。
51+
52+
**方法一:分类判断**
53+
54+
若 $k=1$,我们每次只能将字符串首字符移动到字符串末尾,总共有 $s.length$ 种不同的状态,我们返回其中字典序最小的字符串即可。
55+
56+
若 $k\gt1$,对于形如 $abc[xy]def$ 的字符串,可以依次将 $a$, $b$, $c$ 移动到最后,得到 $[xy]defabc$,然后将 $y$, $x$ 移动到最后,得到 $defabc[yx]$,最后将 $d$, $e$, $f$ 移动到最后,得到 $abc[yx]def$,这样就实现了对 $y$, $x$ 的交换。
57+
58+
因此,只要 $k\gt1$,我们就能够交换字符串中的任何两个相邻字符,最终得到一个升序排列的字符串。
59+
4860
<!-- tabs:start -->
4961

5062
### **Python3**
5163

5264
<!-- 这里可写当前语言的特殊实现逻辑 -->
5365

5466
```python
55-
67+
class Solution:
68+
def orderlyQueue(self, s: str, k: int) -> str:
69+
if k == 1:
70+
ans = s
71+
for _ in range(len(s) - 1):
72+
s = s[1:] + s[0]
73+
ans = min(ans, s)
74+
return ans
75+
return "".join(sorted(s))
5676
```
5777

5878
### **Java**
5979

6080
<!-- 这里可写当前语言的特殊实现逻辑 -->
6181

6282
```java
83+
class Solution {
84+
public String orderlyQueue(String s, int k) {
85+
if (k == 1) {
86+
String ans = s;
87+
StringBuilder sb = new StringBuilder(s);
88+
for (int i = 0; i < s.length() - 1; ++i) {
89+
sb.append(sb.charAt(0)).deleteCharAt(0);
90+
if (sb.toString().compareTo(ans) < 0) {
91+
ans = sb.toString();
92+
}
93+
}
94+
return ans;
95+
}
96+
char[] cs = s.toCharArray();
97+
Arrays.sort(cs);
98+
return String.valueOf(cs);
99+
}
100+
}
101+
```
102+
103+
### **C++**
104+
105+
```cpp
106+
class Solution {
107+
public:
108+
string orderlyQueue(string s, int k) {
109+
if (k == 1) {
110+
string ans = s;
111+
for (int i = 0; i < s.size() - 1; ++i)
112+
{
113+
s = s.substr(1) + s[0];
114+
if (s < ans) ans = s;
115+
}
116+
return ans;
117+
}
118+
sort(s.begin(), s.end());
119+
return s;
120+
}
121+
};
122+
```
63123
124+
### **Go**
125+
126+
```go
127+
func orderlyQueue(s string, k int) string {
128+
if k == 1 {
129+
ans := s
130+
for i := 0; i < len(s)-1; i++ {
131+
s = s[1:] + s[:1]
132+
if s < ans {
133+
ans = s
134+
}
135+
}
136+
return ans
137+
}
138+
t := []byte(s)
139+
sort.Slice(t, func(i, j int) bool { return t[i] < t[j] })
140+
return string(t)
141+
}
64142
```
65143

66144
### **...**

solution/0800-0899/0899.Orderly Queue/README_EN.md

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,13 +44,79 @@ In the second move, we move the 3<sup>rd</sup> character &#39;c&#39; to the end,
4444
### **Python3**
4545

4646
```python
47-
47+
class Solution:
48+
def orderlyQueue(self, s: str, k: int) -> str:
49+
if k == 1:
50+
ans = s
51+
for _ in range(len(s) - 1):
52+
s = s[1:] + s[0]
53+
ans = min(ans, s)
54+
return ans
55+
return "".join(sorted(s))
4856
```
4957

5058
### **Java**
5159

5260
```java
61+
class Solution {
62+
public String orderlyQueue(String s, int k) {
63+
if (k == 1) {
64+
String ans = s;
65+
StringBuilder sb = new StringBuilder(s);
66+
for (int i = 0; i < s.length() - 1; ++i) {
67+
sb.append(sb.charAt(0)).deleteCharAt(0);
68+
if (sb.toString().compareTo(ans) < 0) {
69+
ans = sb.toString();
70+
}
71+
}
72+
return ans;
73+
}
74+
char[] cs = s.toCharArray();
75+
Arrays.sort(cs);
76+
return String.valueOf(cs);
77+
}
78+
}
79+
```
80+
81+
### **C++**
82+
83+
```cpp
84+
class Solution {
85+
public:
86+
string orderlyQueue(string s, int k) {
87+
if (k == 1) {
88+
string ans = s;
89+
for (int i = 0; i < s.size() - 1; ++i)
90+
{
91+
s = s.substr(1) + s[0];
92+
if (s < ans) ans = s;
93+
}
94+
return ans;
95+
}
96+
sort(s.begin(), s.end());
97+
return s;
98+
}
99+
};
100+
```
53101
102+
### **Go**
103+
104+
```go
105+
func orderlyQueue(s string, k int) string {
106+
if k == 1 {
107+
ans := s
108+
for i := 0; i < len(s)-1; i++ {
109+
s = s[1:] + s[:1]
110+
if s < ans {
111+
ans = s
112+
}
113+
}
114+
return ans
115+
}
116+
t := []byte(s)
117+
sort.Slice(t, func(i, j int) bool { return t[i] < t[j] })
118+
return string(t)
119+
}
54120
```
55121

56122
### **...**
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
class Solution {
2+
public String orderlyQueue(String s, int k) {
3+
if (k == 1) {
4+
String ans = s;
5+
StringBuilder sb = new StringBuilder(s);
6+
for (int i = 0; i < s.length() - 1; ++i) {
7+
sb.append(sb.charAt(0)).deleteCharAt(0);
8+
if (sb.toString().compareTo(ans) < 0) {
9+
ans = sb.toString();
10+
}
11+
}
12+
return ans;
13+
}
14+
char[] cs = s.toCharArray();
15+
Arrays.sort(cs);
16+
return String.valueOf(cs);
17+
}
18+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
class Solution {
2+
public:
3+
string orderlyQueue(string s, int k) {
4+
if (k == 1) {
5+
string ans = s;
6+
for (int i = 0; i < s.size() - 1; ++i)
7+
{
8+
s = s.substr(1) + s[0];
9+
if (s < ans) ans = s;
10+
}
11+
return ans;
12+
}
13+
sort(s.begin(), s.end());
14+
return s;
15+
}
16+
};
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
func orderlyQueue(s string, k int) string {
2+
if k == 1 {
3+
ans := s
4+
for i := 0; i < len(s)-1; i++ {
5+
s = s[1:] + s[:1]
6+
if s < ans {
7+
ans = s
8+
}
9+
}
10+
return ans
11+
}
12+
t := []byte(s)
13+
sort.Slice(t, func(i, j int) bool { return t[i] < t[j] })
14+
return string(t)
15+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
class Solution:
2+
def orderlyQueue(self, s: str, k: int) -> str:
3+
if k == 1:
4+
ans = s
5+
for _ in range(len(s) - 1):
6+
s = s[1:] + s[0]
7+
ans = min(ans, s)
8+
return ans
9+
return "".join(sorted(s))

0 commit comments

Comments
 (0)