14. 가장 긴 공통 접두어
쉬운
문자열 배열 사이 가장 긴 공통 접두어 문자열을 찾는 함수를 작성합니다.
공통 접두사가없는 경우 빈 문자열을 반환 ""
.
예 1 :
입력 : [ "꽃", "흐름", "비행"] 출력 : "FL"
예 2 :
입력 : [ "개", "레이싱 카", "자동차"] 출력 : "" 설명 : 입력 문자열 사이에 공통 접두사가 없습니다.
노트 :
모든 주어진 입력은 소문자에있다 a-z
.
패키지 leetcode; 공용 클래스 LongestCommonPrefix { @ org.junit.Test 공공 무효 시험 () { 문자열 [] strs1 = { "꽃", "흐름", "비행"}; 문자열 [] strs2 = { "개", "레이싱 카", "자동차"}; 에서 System.out.println (longestCommonPrefix1 (strs1)); 에서 System.out.println (longestCommonPrefix1 (strs2)); 에서 System.out.println (longestCommonPrefix2 (strs1)); 에서 System.out.println (longestCommonPrefix2 (strs2)); 에서 System.out.println (longestCommonPrefix3 (strs1)); 에서 System.out.println (longestCommonPrefix3 (strs2)); 에서 System.out.println (longestCommonPrefix4 (strs1)); 에서 System.out.println (longestCommonPrefix4 (strs2)); } 공용 문자열 longestCommonPrefix1 (문자열 [] strs) { 경우 (strs.length == 0) { 창 ""; } 문자열 접두어 strs = [0]; 대해 INT (I = 1; I <strs.length; 내가 ++) { 동안 (strs [I] .indexOf (접두사)! = 0) { 프리픽스 prefix.substring = (0, prefix.length () - 1); 경우 (prefix.isEmpty는 ()) { ""를 반환; } } } 접두사를 반환; } 공용 문자열 longestCommonPrefix2 (문자열 [] strs) { 경우 (strs == 널 || strs.length == 0) { 창 ""; } 에 대해 ()는 (i <strs [0] .length, I = 0을 int로 난 ++) { 숯 strs C = [0] .charAt (I); 위해 (INT의 J = 1; J <strs.length, J ++) { (! I == strs [J]를 .length () || strs은 [J]를 .charAt (I) = C)는 {만약 strs [0] (0, I)을 반환 .substring; } } } strs 반품 [0]; } 공용 문자열 longestCommonPrefix3 (문자열 [] strs) { 경우 (strs == 널 || strs.length == 0) { 창 ""; } longestCommonPrefix3 (strs, 0, strs.length을 - 1)의 리턴; } 개인 문자열 longestCommonPrefix3 (문자열 [] strs, INT의 L, R의 INT) { 경우 (L == R)은 { strs [1,5]를 복귀; 사용한다} else { INT 중간 = (L +에서의 R) / 2; 문자열 lcpLeft = longestCommonPrefix3 (strs, L, 중간); 문자열 lcpRight = longestCommonPrefix3 (strs 중간 + 1, R); 반환 commonPrefix (lcpLeft, lcpRight); } } 문자열 commonPrefix (문자열은 문자열 왼쪽 오른쪽) { INT 분 = Math.min (left.length () right.length ()); 대해 INT (I = 0; I <는 분; 내가 ++) { 경우 (left.charAt (I) = right.charAt (I)!) { (0, I)을 반환 left.substring; } } (0 분) left.substring 리턴; } 공용 문자열 longestCommonPrefix4 (문자열 [] strs) { 경우 (strs == 널 || strs.length == 0) { 창 ""; } INT는 Integer.MAX_VALUE은 minlen =; (문자열 STR : strs)에 대한 { minlen이 = Math.min (minlen이, str.length ()); (저 <= 높음) {동안 INT 중간 = (고 저 +) / 2; } INT 낮은 = 1; = minlen이 높은을 int로; 경우 (isCommonPrefix (strs 중간)) { 낮은 중간 + = 1; } 다른 { 높은 = 중간 - 1; } } strs [0] .substring (낮은 높이 + 0 () / 2)을 반환; } 전용 부울 isCommonPrefix (문자열 [] strs, INT LEN) { 문자열 STR1 strs = [0] .substring (0 렌); 대해 INT (I = 1; I <strs.length; 내가 ++) { 경우 {(strs [I] .startsWith (STR1)!) 는 false를 반환; } } TRUE를 반환; } }