주어진 문자 배열에서 가장 긴 접두사를 찾는 문제입니다.
["flower", "flow", "flight"] -> ["fl"]
class Solution {
public:
string longestCommonPrefix(vector<string>& strs) {
string commonPrefix = strs[0];
if(strs.size() == 1)
return commonPrefix;
for(int i = 1; i <strs.size();i++)
{
int j = 0;
while(strs[i][j] == commonPrefix[j])
{
if( j < commonPrefix.length())
j++;
else
break;
}
commonPrefix = commonPrefix.substr(0,j);
if(commonPrefix =="") break;
}
return commonPrefix;
}
};
문제를 다 풀고 보니까 자꾸 heap - buffer - overflow가 발생했다.
생각해보니까 내가 적은 코드에서 heap에서 메모리를 할당받은 적이 없는데 heap 영역에서 오류가 나서 의아했다. 하지만 조금 더 생각해보니까
공통의 string을 비교하는 경우, while의 조건문에 의해 j의 값이 증가하는데, 두개의 string이 똑같을 경우 j의 값이 계속 올라가고 substr에서 heap의 영역까지 침범하여 오류가 난듯 싶었다. 결국에는 조건문을 추가하고 문제를 풀 수 있었다.