본문 바로가기

알고리즘풀이

Leetcode: Longest Common Prefix, 가장 긴 공통 접두사

문제설명

  • 문자열 배열이 주어졌을 때, 각 문자열들의 공통된 접두사를 찾는다.
  • 0 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i] 은 오직 영어 소문자만을 갖는다.

풀이 방법

  • 두 문자열의 공통 접두사 부분만 추출하는 merge(_ :String, _ :String) 함수를 구현한다.
  • 배열 객체를 하나의 문자열로 줄여나가기 위해 reduce 구문을 사용한다.
  • 빈 리스트가 넘어오는 예외를 guard 구문으로 처리했다.
func longestCommonPrefix(_ strs: [String]) -> String {
    guard !strs.isEmpty else {
        return ""
    }
    return strs.reduce(strs[0], merge)
}

func merge(_ str1: String, _ str2: String) -> String {
    let length = str1.count < str2.count ? str1.count : str2.count
    let arr1 = Array(str1)
    let arr2 = Array(str2)
    var commonLength = 0
    for i in 0..<length {
        if (arr1[i] != arr2[i]) {
            break;
        }
        commonLength+=1
    }
    return String(arr1[0..<commonLength])
}

print(merge("abc", "ab"))
print(merge("flower", "flow"))

print(longestCommonPrefix(["flower","flow","flight"])) //fl
print(longestCommonPrefix(["dog","racecar","car"])) // ""
print(longestCommonPrefix(["dog","doracecar","dcar"])) // d
print(longestCommonPrefix(["dog"])) // dog
print(longestCommonPrefix([])) // ""