WN_인생기록

LeetCode - 14.Longest Common Prefix 본문

LeetCode/Easy

LeetCode - 14.Longest Common Prefix

WhNi 2024. 3. 27. 16:19

가장 긴 접두사 찾는 문제이다.

 

처음엔 한글자씩 뽑아서 일치하면 넘어가고 그런식으로 풀어나가려고 했는데, 한글자씩 뽑는건 되는데 체크하고 다음거 넘어가고, 틀리면 구문 탈출하는 과정이 복잡한거 같아서 생각을 바꿨다. 

 

아예 첫 글자를 기준으로 삼고, 뒤에서부터 하나씩 잘라가면서 비교하는게 나을거 같았다. 

왜냐하면 앞에서부터 글자를 비교하면 글자 length를 고려해야해서 복잡할거 같았다. 

 

class Solution 
{
public:
	string longestCommonPrefix(vector<string>& strs)
	{
		if (strs.empty()) return "";
		// 첫번째 단어를 기준으로 선택
		string prefix = strs[0];

		// 첫 번째 문자열을 제외하고 나머지 문자열을 순회
		for (int i = 1; i < strs.size(); i++)
		{
			// prefix의 단어와 일치하면 구문 탈출
			while (strs[i].find(prefix) != 0)
			{
				// 뒷부분에서부터 한개씩 자르기
				prefix = prefix.substr(0, prefix.length() - 1);
				// 첫번째 단어 다 지워졌을때 바로 탈출 
				if (prefix.empty()) return "";
			}
		}
		return prefix;
	}
};

 

그래서 뒷부분 부터 잘라가면서 모든 문자열에 공통적인 접두사를 찾는게 좋다고 생각해서 이런식으로 풀어봤다.

 

가장 빠른건 2차원 배열로, 각 문자열의 단어 하나하나를 순환하면서, 동일한 위치에 같은 문자가 있는지 확인하고, 없으면 바로 루프를 중단하고 지금까지의 문자열을 반환하는 코드였다. 

class Solution {
public:
    string longestCommonPrefix(vector<string>& strs) {
       string rez = "";
       int ct = 0;
        int i = 1;
           
            for(int j = 0; j < strs[0].size(); j++)
            { 
                for(int i = 1; i < strs.size();i++) 
                  if(strs[0][j] == strs[i][j])
                  { 
                   ct++;
                  }
                  if(ct == strs.size()-1)
                  {
                  rez += strs[0][j];
                  ct = 0;
                  }
                  else 
                    break;
            }
                
       return rez; 
    }
};

내가 생각하기에 가장 복잡할거 같은 코드가 제일 빠른 코드였다 ㅎㅎ;;; 

 

다음엔 생각해본건 꼭 구현해보고 다른 방식으로 도전해 봐야겠다 ㅠ 

'LeetCode > Easy' 카테고리의 다른 글

LeetCode - 13 Roman to Integer  (0) 2024.03.27
LeetCode - 9. Palindrome Number  (0) 2024.03.27