strs은 단어가 담긴 배열입니다.
공통된 시작 단어(prefix)를 반환해주세요.
strs = ['start', 'stair', 'step']
// return은 'st'
strs = ['start', 'wework', 'today']
// return은 ''
function getPrefix(strs) {
if (strs.length === 0) return '';
let prefix = strs[0];
for (let i = 1; i < strs.length; i++) {
while (strs[i].indexOf(prefix) !== 0) {
prefix = prefix.substring(0, prefix.length - 1);
}
}
return prefix;
}
결과에 따라 prefix의 뒷 스트링을 하나씩 추출하는 방식으로 결과값을 찾아가는 방식이 인상적이다.
function getPrefix(strs) {
if (strs.length === 0) return '';
let strArr = strs[0].split('');
let idx = 0;
let stop = false;
for (let i = 0; i < strArr.length; i++) {
let char = strArr[i];
for (let j = 0; j < strs.length; j++) {
let thisStrArr = strs[j].split('');
if (char !== thisStrArr[i]) {
idx = i-1;
stop = true;
break;
}
}
if (stop) break;
}
if (!stop) {
idx = strArr.length - 1;
}
return strArr.slice(0, idx+1).join('');
}
처음에 문제를 보고는 되게 간단하게 풀 수 있다고 생각했는데, 생각보다 오랜 시간이 걸렸다. 특히 []
이런 빈 배열이 들어올때 인덱스의 길이 자체를 구할 수 없기 때문에 에러가 떠서 원인을 찾느라 고생을 좀 했다.
for문을 두번 돌려서 첫번째 string을 기준으로 돌고, 그 안에 엘리먼트 갯수-1 만큼 돌렸고, 각 인덱스가 자기의 다음 element 와 비교하여 겹치는 알파벳이 나오면 추가, 다른 알파벳이면 추가된 알파벳까지 확실하게 삭제하는 형태의 코드로 만들었다.