[LeetCode/Dart] 14 : Longest Common Prefix

문제

https://leetcode.com/problems/longest-common-prefix/

풀이

  • strs를 순회하여 최소길이 구하기

  • pnt 변수를 활용하여 각 문자열의 substring을 늘려가며 공통되는 부분 탐색

class Solution {
  String longestCommonPrefix(List<String> strs) {

    var rst = "";

    var minLength = 201;

    // find minLength of string
    for (var i = 0; i < strs.length; i++) {
        if (strs[i].length <= minLength) {
            minLength = strs[i].length;
        }
    }

    if (strs.length == 1) {
        return strs[0];
    }

    var pnt = 0;

    // check every characters
    while (pnt < minLength) {
        final prefix = strs[0].substring(0,pnt+1);

        // loop every strings in strs
        for (var i = 0; i < strs.length; i++) {
            final currentPrefix = strs[i].substring(0,pnt+1);
            if (currentPrefix != prefix) {
                return rst;
            } 
        }
        rst = prefix;
        pnt++;
    }

    return rst;
  }
}

startsWith()으로 수정 버전

class Solution {
  String longestCommonPrefix(List<String> strs) {

    var rst = "";

    var minLength = 201;

    // find minLength of string
    for (var i = 0; i < strs.length; i++) {
        if (strs[i].length <= minLength) {
            minLength = strs[i].length;
        }
    }

    if (strs.length == 1) {
        return strs[0];
    }

    var pnt = 0;

    while (pnt < minLength) {
        final prefix = strs[0].substring(0,pnt+1);

        for (var i = 0; i < strs.length; i++) {
            final str = strs[i];
            if (!str.startsWith(prefix)) {
                return rst;
            }
        }
        rst = prefix;
        pnt++;
    }

    return rst;
  }
}

후기

Dart를 사용한 게 오랜만이라 String에서 제공되는 startsWith 매서드를 까먹고 있었다. 최소 길이를 구할 때도 reduce 매서드를 활용할 수 있다.