[Leetcode] 로그 파일에 937 재정렬 로그 파일 정렬

당신의 배열을 가지고  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"]

노트 :

  1. 0 <= logs.length <= 100
  2. 3 <= logs[i].length <= 100
  3. 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 }

 

추천

출처www.cnblogs.com/liuliu5151/p/11026126.html