LeetCode_14. 가장 긴 공통 접두어

 

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를 반환; 
	} 
}

 

추천

출처www.cnblogs.com/denggelin/p/11528349.html