[LeetCode] Longest Common Prefix

아르당·2024년 11월 19일

LeetCode

목록 보기
5/68
post-thumbnail

문제를 이해하고 있다면 바로 풀이를 보면 됨
전체 코드로 바로 넘어가도 됨
마음대로 번역해서 오역이 있을 수 있음

Problem

문자열 배열에서 가장 긴 공통의 접두사를 찾는 함수를 작성해라.

만약 공통의 접두사가 없다면, 빈 문자열 ""을 반환해라.

Example

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

#2
Input: strs = ["dog", "racecar", "car"]
Output: ""
Explanation: 입력받은 문자열에서 공통의 접두사가 없다.

Constraints

  • 1 <= strs.length <= 200
  • 0 <= strs[i].length <= 200
  • strs[i]는 영어 소문자로만 되어있다.

Solved

문자열을 일일이 잘라서 비교하는 것보다 하나의 문자열을 기준으로 잡고 해당 문자열을 잘라서 다른 문자열들과 비교하는 것이 쉽게 문제를 해결할 수 있다.

먼저 기준이 될 문자열 prefix를 선언하고 strs[0]을 할당한다.

String prefix = strs[0];

이제 반복문을 통해 strs를 순회할 것인데 strs의 0번째 값을 기준으로 잡았기때문에 0번째는 비교할 필요가 없어서 1번째부터 순회한다.

for(int i = 1; i < strs.length; i++){
  
}

for문으로 strs를 순회하면서 prefix와 해당 strs[i]를 비교할 것이다.

for(int i = 1; i < strs.length; i++){
  while(strs[i].indexOf(prefix) != 0){
    prefix = prefix.substring(0, prefix.length() - 1);
  }
}

strs[i]를 indexOf()를 통해 prefix가 0번째에 위치하는지 검사를 한다. 이때 prefix가 0번째에 있지 않다면 prefix를 끝에서부터 잘라서 다시 prefix에 할당하고, 이것을 계속 반복한다.

마지막으로 prefix를 반환한다.

return prefix;

All Code

public String longestCommonPrefix(String[] strs) {
  String prefix = strs[0];

  for(int i = 1; i < strs.length; i++){
    while(strs[i].indexOf(prefix) != 0){
      prefix = prefix.substring(0, prefix.length() - 1);
    }
  }

  return prefix;
}
profile
내 마음대로 코드 작성하는 세상

0개의 댓글