[LeetCode] 14. Longest Common Prefix

#14. Longest Common Prefix

문제

주어진 문자열의 배열에서 가장 긴 접두사를 찾는 문제.

설명

처음에는 접두사라는게 뭔지몰라서 가장긴 공통된 문자열을 찾는 줄 알고, 열심히 코드를 만들었습니다. 근데 Submit을 눌러보니 계속 틀렸다고 나와서 접두사를 검색해보고 다시 코드를 만들었습니다. 제가 실수로 만든 가장 긴 공통된 문자열을 찾는 코드는 아래 따로 설명하겠습니다.

자세한 설명은 코드에 주석으로 적겠지만, 간단하게 말하면 입력받은 모든 문자열을 돌면서 가장긴 접두사를 찾습니다. indexOf() 를 사용해서 indexOf()0 을 반환하는지 확인해서 접두사인지 확인할 수 있습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
var longestCommonPrefix = function(strs) {
  let result = ''; // 반환할 가장 긴 접두사를 저장할 변수
  if (strs.length === 0) return result; // 입력받은 배열 strs가 빈 배열이면 ''을 반환합니다. 
  const str = strs[0]; // 어떤 문자열을 사용해도 상관없지만 그냥 첫 번째 문자열을 기준으로 잡습니다.
  for (let i = 0; i < str.length; i++) { // 첫 번째 문자열을 돌면서 한 문자씩 가져옵니다.
      const common = result + str[i]; // 새로운 문자를 추가한 문자열이 가장 긴 접두사인지 확인하기 위해 문자열을 만듭니다.
      for (let st of strs) {
          if (st.indexOf(common) !== 0) return result;
          // 입력받은 문자열들을 돌면서 새로운 긴 접두사가 문자열에 접두사로 있는지 확인합니다. 
          // 없다면 이전가지의 문자가 가장 긴 접두사이므로 반환합니다.
      }
      result = common; // 현재 common이 가장 긴접두사 이므로 result를 common의 값으로 변겅합니다.
  }
  return result;
};

실수로 만든 가장 긴 공통된 문자열을 찾는 코드

우선! 입력받은 strs배열의 첫 번째 문자열을 기준으로 for문을 돌면서 하나씩 다른 문자열에 포함 되는지 확인합니다. 포함되는지 확인하는 방법은 includes()를 사용합니다. 포함 된다면 우리가 반환할 변수 result에 담고, 다음 문자로 넘어가면서 확인합니다. 자세한 설명은 코드에 주석으로 남기겠습니다.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
const longestCommonPrefix = function(strs) {
  let common = ''; // 현재 작업중인 공통된 문자열
  const commonArray = []; // 공톤된 문자열들을 저장한 배열
  if (strs.length === 0) return result; // 입력받은 배열 strs가 빈 배열이면 ''을 반환합니다.
  const firstStr = strs[0]; // 어떤 문자열을 사용해도 상관없지만 그냥 첫 번째 문자열을 기준으로 잡습니다. 
  for (let i = 0; i < firstStr.length; i++) { // 첫 번째 문자열을 돌면서 한 문자씩 가져옵니다.
    common = common + firstStr[i]; // 우리가 반환하기 위해 가장 긴 문자열을 만들고 있는 common 변수와 새로운 문자를 합칩니다.
    for (let str of strs) {  // 입력받은 문자열 배열을 돌면서 변수 common를 포함하고 있는지 확인합니다.
      if (!str.includes(common)) common = '';  // 만약 common이 포함 안되는 문자열이 있다면 이전 문자까지가 가장 긴 문자열이기 때문에 빈 문자열을 만듭니다.
    }
    if (common) commonArray.push(common); // 공통된 문자열이 있다면 공통된 문자열을 저장하는 배열에 저장합니다.
  }
  commonArray.sort((a,b) => b.length - a.length) // 우리가 저장한 공통된 문자열의 배열을 문자열이 가장 긴 순서로 정렬합니다.
  return commonArray[0] || ''; // commonArray의 첫 요소가 가장 긴 공통된 문자열이기 때문에 반환합니다.
};

console.log(${longestCommonPrefix(["refloweraaaa","flowaaaa","flightaaaa"])});
// OUTPUT: aaaa

LeetCode

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 “”.

Example 1:

1
2
Input: strs = ["flower","flow","flight"]
Output: "fl"

Example 2:

1
2
3
4

Input: strs = ["dog","racecar","car"]
Output: ""
Explanation: There is no common prefix among the input strings.

Constraints:

1 <= strs.length <= 200 0 <= strs[i].length <= 200 strs[i] consists of only lower-case English letters.

Built with Hugo
Theme Stack designed by Jimmy