题目描述如下:

大致思路: 将目标数组转化为由每一项的每个对应序号字符串拼接起来的数组...好像有点绕, 实现效果为:
test('generateArr', () => {
expect(generateArr(['abc', 'dfg'])).toEqual(['ad', 'bf', 'cg']);
expect(generateArr(['abc', 'cd'])).toEqual(['ac', 'bd', 'c ']);
expect(generateArr(['aaa', 'aa', 'aaa'])).toEqual(['aaa', 'aaa', 'a a']);
});
实现代码如下:
const tmpArr: string[] = [];
strs.forEach((str) => {
for (let i = 0; i < strs[0].length; ++i) {
tmpArr[i] = (tmpArr[i] ? tmpArr[i] : '') + (str[i] ?? ' ');
}
});
判断转化后的数组的每一项是否由相同字符组成, 使用正则判断:
for (let i = 0; i < tmpArr.length; ++i) {
const tmp = tmpArr[i];
if (/^(\w)\1{1,}$/.test(tmp)) {
res += tmp[0];
} else {
break;
}
}
考虑一些特殊情况:
if (strs.includes('') || !strs.length) return '';
if (strs.length === 1) return strs[0];
最终代码:
function longestCommonPrefix(strs: string[]): string {
let res = '';
if (strs.includes('') || !strs.length) return res;
if (strs.length === 1) return strs[0];
const tmpArr: string[] = [];
strs.forEach((str) => {
for (let i = 0; i < strs[0].length; ++i) {
tmpArr[i] = (tmpArr[i] ? tmpArr[i] : '') + (str[i] ?? ' ');
}
});
for (let i = 0; i < tmpArr.length; ++i) {
const tmp = tmpArr[i];
if (/^(\w)\1{1,}$/.test(tmp)) {
res += tmp[0];
} else {
break;
}
}
return res;
}
提交时失败了几次, 一次是少判断长度为1的情况, 另一次是 ['aaa', 'aa', 'aaa']的情况, 还是漏考虑了几种边界情况, 希望以后的我能少出现这种错误。