문제
Write a function to find the longest common prefix string amongst an array of strings.
If there is no common prefix, return an empty string "".
문자 배열에서 가장 긴 공통 접두사를 찾는 함수를 만드시오.
공통 접두사라 없을 시 ""를 리턴.
예시
Input: strs = ["flower","flow","flight"]
Output: "fl"
Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.
제약조건
- 1 <= strs.length <= 200
- 0 <= strs[i].length <= 200
- strs[i] consists of only lower-case English letters.
답안
class Solution {
public String longestCommonPrefix(String[] strs) {
if(strs.length == 0) return ""; #1
String pre = strs[0]; #2
for(int i = 1; i < strs.length; i++){ #3
String cur = strs[i]; #4
while(cur.indexOf(pre) != 0){ #5
pre = pre.substring(0,pre.length()-1); #6
}
}
return pre; #7
}
}
Input: strs = ["flower","flow","flight"] 일 경우를 가정하고 위 코드를 실행시켜보자.
#1 : 배열의 길이가 0일 경우, 즉 공통된 접두사를 찾지 못했을 경우 "" 반환.
#2 : strs 배열의 0번째 인덱스 값인 "flower"를 문자 변수 pre에 담는다.
#3 : strs 배열의 길이가 1보다 큰 경우 아래 내용을 반복하는 for 구문 작성.
#4 : int i = 1로 작성했기 때문에 1부터 반복된다. strs 배열 인덱스 1번, 즉 2번째 값인 "flow"를 문자 변수 cur에 담는다.
#5, #6 : 주어진 매개변수와 일치하는 인덱스 값을 반환하는 indexOf 함수 사용. "flow".indexOf("flower")가 0아닌 경우, 즉 매개변수값이 일치하지 않는다면 0번째 인덱스값을 가진 pre에서 pre 문자 길이 -1만큼을 글자 추출.
while문에서 pre 문자를 기준으로 일치하는 값이 없으면 문자열을 하나씩 자르면서 맞춰보고 또 반복하고 하는 과정을 계속 반복한다. 그리고 해당 작업이 완료되면 i값이 1 증가된 만큼의 인덱스 값을 가지고 while문을 반복하여 공통된 접두사를 찾아나간다.
'Programming > 알고리즘 공부' 카테고리의 다른 글
[LeetCode] Implement strStr() | 난이도: Easy (0) | 2021.08.15 |
---|---|
[LeetCode] Remove Duplicates from Sorted Array | 난이도: Easy (0) | 2021.08.12 |
[LeetCode] Roman to Integer | 난이도: Easy (0) | 2021.08.08 |
[LeetCode] Palindrome Number | 난이도: Easy (0) | 2021.08.06 |
[LeetCode] Reverse Integer | 난이도: Easy (0) | 2021.08.06 |