Skip to content

Commit 562cd42

Browse files
committed
add leetcode : 937
1 parent c0abad0 commit 562cd42

3 files changed

Lines changed: 98 additions & 11 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ target/
1818
*.iws
1919
*.iml
2020
*.ipr
21+
out/
2122

2223
### NetBeans ###
2324
/nbproject/private/

Algorithm/src/leetCode/readme.md

Lines changed: 26 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -182,17 +182,32 @@
182182

183183
## 901-950
184184

185-
| | |
186-
| ---- | ------------------------------ |
187-
| | |
188-
| | |
189-
| | |
190-
| | _908MinimumDifference1最小差值 |
191-
| | |
192-
| | |
193-
| | |
194-
| | |
195-
| | |
185+
| | |
186+
| ---- | ------------------------------------- |
187+
| | |
188+
| | |
189+
| | |
190+
| | _908MinimumDifference1最小差值 |
191+
| | |
192+
| | |
193+
| | |
194+
| | |
195+
| | |
196+
| | |
197+
| | |
198+
| | |
199+
| | |
200+
| | |
201+
| | |
202+
| | |
203+
| | |
204+
| | _937RearrangeLogFiles重新排列日志文件 |
205+
| | |
206+
| | |
207+
| | |
208+
| | |
209+
| | |
210+
| | |
196211

197212

198213

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
package leetCode.subject.number901_950;
2+
3+
import java.util.Arrays;
4+
5+
/**
6+
* @author : CodeWater
7+
* @create :2022-05-03-15:37
8+
* @Function Description :937
9+
* 字符在前,存储部分按照字典序,字典序一样在按照标识符部分;数组在字符后,不动
10+
*/
11+
public class _937RearrangeLogFiles {
12+
class Solution {
13+
public String[] reorderLogFiles(String[] logs) {
14+
int length = logs.length;
15+
// 初始化pair类型
16+
Pair[] arr = new Pair[length];
17+
for( int i = 0 ; i < length ; i++ ) arr[i] = new Pair( logs[i] , i );
18+
// 按照指定的规则进行pair排序与
19+
Arrays.sort( arr , (a , b ) -> logCompare(a , b) );
20+
// 获取排好序之后的字符log
21+
String[] reordered = new String[length];
22+
for( int i = 0 ; i < length ; i++ ) reordered[i] = arr[i].log;
23+
24+
return reordered;
25+
}
26+
27+
// 比较规则
28+
public int logCompare( Pair pair1 , Pair pair2 ){
29+
// 获取
30+
String log1 = pair1.log , log2 = pair2.log;
31+
int index1 = pair1.index , index2 = pair2.index;
32+
// log按照空格拆分成2份
33+
String[] split1 = log1.split(" " , 2 );
34+
String[] split2 = log2.split(" " , 2 );
35+
// 判断第二部分是不是数字
36+
boolean isDigit1 = Character.isDigit( split1[1].charAt(0) );
37+
boolean isDigit2 = Character.isDigit( split2[1].charAt(0) );
38+
if( isDigit1 && isDigit2 ){
39+
// 如果都是数字,按照原样返回
40+
return index1 - index2 ;
41+
}
42+
// 如果都是字符
43+
if( !isDigit1 && !isDigit2 ){
44+
// 比较log切割第二部分信息的第一个开头字符,按照字典序(相等0, 大于1,小于-1)
45+
int sc = split1[1].compareTo( split2[1] );
46+
if( sc != 0 ){
47+
// 两字符不相等,
48+
// return 1 时,按照从小到大排序 (也可以是2,3.....正数)
49+
// return 0 时,原位置不动
50+
// return-1 时,按照从大到小排序
51+
return sc;
52+
}
53+
// log第二部分相等。比较log第一部分的第一个字符
54+
return split1[0].compareTo( split2[0] );
55+
}
56+
// 有一个字符,一个数字,判断pair1是不是数字,是的话升序处理
57+
return isDigit1 ? 1 : -1;
58+
}
59+
}
60+
61+
// 存储一条日志信息和一个在原字符串中的下标位置
62+
class Pair{
63+
String log;
64+
int index;
65+
66+
public Pair(String log , int index ){
67+
this.log = log;
68+
this.index = index;
69+
}
70+
}
71+
}

0 commit comments

Comments
 (0)