당신의 배열을 가지고 logs
. 각 로그는 단어의 공백으로 구분 된 문자열입니다.
각 로그의 각 로그의 첫번째 단어는 영숫자 식별자 . 그런 다음, 다음 중 하나를
- 식별자 후 각 단어는 소문자로 구성, 또는 것입니다;
- 식별자 후의 각 단어 숫자로만 구성된다.
우리는 로그의 두 가지 종류의 호출 레터 로그 와 자리-로그를 . 각 로그는 식별자 후 최소 하나 개의 단어를 가지고 있음을 보장한다.
편지 - 모든 로그가 어떤 자리 로그 전에 올 수 있도록 로그를 재정렬. 편지 - 로그는 관계의 경우에 사용되는 식별자로, 전적으로 식별자를 무시 정렬됩니다. 숫자로부터 로그는 원래 순서에 넣어해야합니다.
로그의 마지막 순서를 돌려줍니다.
예 1 :
입력 : [ "A1 9 1 2 3", "G1 법 자동차", "zo4 4-7", "AB1 OFF 키 개", "A8 법 동물원" ]
출력 [ "G1 법 자동차", "A8 법 동물원" "오프 AB1 개 키", "A1 9 1 2 3", "4 zo4 7"]
노트 :
0 <= logs.length <= 100
3 <= logs[i].length <= 100
logs[i]
식별자 및 식별자 후 단어가 보장됩니다.
질문의 의미 :
첫 번째 문자, 디지털 로그의 정렬 된 순서를 기록하는 데 필요한, (소정 인증 번호의 첫 번째 단어) 로그 파일을 감안할 때
아이디어 :
비교기를 다시 작성
코드 :
1 개 급 솔루션 { 2 공용 문자열 [] reorderLogFiles (문자열 [] 로그) { 3 비교기 <문자열>으로 mycomp = 새로운 비교기 <문자열> () { 4 @Override 5 공중 INT (문자열 S1 문자열 S2) {비교 6 문자열 [ ] = split1 s1.split ( "", 2 ); 7 문자열 [] = split2 s2.split ( "", 2 ); 8 부울 isDigit1 = Character.isDigit (split1 [1] .charAt (0 )); 9 부울 isDigit2 = Character.isDigit (split2 [1] .charAt (0 )); 10 의 경우(! && isDigit1 isDigit2) { 11 INT 완 split1 = [1] .compareTo (split2 [1 ]); 12 의 경우 (샘플 콘텐츠! = 0 ) 13 리턴 완; 14 리턴 split1 [0] .compareTo (split2 [0 ]); 15 } 16 리턴 isDigit1? (isDigit2 0 : 1?) : 27 ; 17 } 18 }; 19 Arrays.sort에 (로그으로 mycomp); 20 리턴 로그; 21 } 22 }