[Leetcode] 14. Longest Common Prefix
Algorithm2021. 7. 24. 19:49
반응형
Identifying the Problem
주어진 단어들의 공통 접두사를 찾아 리턴한다.
Ex ) strs = ["flower","flow","flight"] -> output : fl
제한조건은 다음과 같다.
- 1 <= 단어의 개수 <= 200
- 0 <= 각 단어별 길이 <= 200
- 모든 strs[i] 는 소문자이다.
Organizing thoughts
0. 단어가 하나이면 전체 return, 단어 중 " "이 있는 경우 return 0
1. 가장 짧은 단어의 길이를 구함
2. 그 길이만큼 반복하면서
0번째 1번째
1번째 2번째
2번째 3번째
... 비교하다가
서로 다른 경우가 있으면 바로 이전까지의 정답 return
Sourcecode
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
char * longestCommonPrefix(char ** strs, int strsSize){
if (strsSize == 0) return ""; //0
if (strsSize == 1) return strs[0]; //0
char *answer = malloc(sizeof(char) * 200);
strcpy(answer,"");
int ss=0;
int n[200] = {0,};
ss= strlen(*strs);
if(ss==0) return answer; //0
for(int i=1;i<strsSize;i++) //1
{
n[i] =strlen(strs[i]);
if(ss>n[i])
ss = n[i];
}
for(int i=0;i<ss;i++) //2
{
for(int k =0; k<strsSize-1 ; k++)
{
if(strs[k][i] != strs[k+1][i])
return answer;
}
strncat(answer,&(strs[0][i]),1);
}
return answer;
}
Mistake
단어수가 3개인 줄 알고,
A=B, B=C -> A=C 논리를 써서 코드 작성했다가 단어 수가 3개 이상이 될 수 있었음을 늦게 알고,
갈아엎음..
New things learned
- strncat(answer,&(strs[0][i]),1) 에서 strcat 을 사용했으면 hello ello llo lo o 가 누적이 되었을 것이다.
- strlen, strcat, strcpy 의 파라미터는 포인터 형으로 주어야 한다.
- 2차원 포인터 문자열을 사용할 때, s[j][k] 이런 식으로 하는 습관을 기르자
굳이 하겠다면 *(*(ptr_ary+j)+k) 이런식으로 사용하면 된다. - 문자열 포인터는 읽기 전용이기에 개별 요소를 변경하는 것은 불가능하다.
*(str + 1) = 'z' (X)
반응형
'Algorithm' 카테고리의 다른 글
[Leetcode] 26. Remove Duplicates from Sorted Array (0) | 2021.07.25 |
---|---|
[Leetcode] 21. Merge Two Sorted Lists (0) | 2021.07.24 |
[Leetcode] 13. Roman to Integer (1) | 2021.07.20 |
[Leetcode] 20. Vaild Parentheses (0) | 2021.07.20 |
[Leetcode] 9. Palindrome Number (0) | 2021.07.19 |
댓글()