Take 2 strings s1 and s2 including only letters from ato z. Return a new sorted string, the longest possible, containing distinct letters - each taken only once - coming from s1 or s2.
Examples:
a = "xyaabbbccccdefww"
b = "xxxxyyyyabklmopq"
longest(a, b) -> "abcdefklmopqwxy"
a = "abcdefghijklmnopqrstuvwxyz"
longest(a, a) -> "abcdefghijklmnopqrstuvwxyz"
function longest(s1, s2) {
let s1s2Obj = (s1+s2).split('').reduce((obj, el) => {
if (el in obj) obj[el] += 1;
else obj[el] = 1;
return obj;}, {});
return Object.keys(s1s2Obj)
.sort()
.join('');
}
function longest(s1, s2) {
let newArr = (s1+s2).split('')
let result = [];
for (let i = 0; i < newArr.length; i++) {
let flag = 0;
for (let j = i + 1; j < newArr.length; j++) {
if (newArr[i] === newArr[j])
flag = 1;
}
if (flag === 0)
result.push(newArr[i]);
}
return result.sort().join('');
}
내가 그냥 .sort()
이렇게 해도 알파벳이니 오름차순으로 정렬될 것을, .sort((a, b) => a - b)
로 하다가 한참을 헤메었다. 어휴! 🤦♀️그래서 두가지 방법으로 풀게 되었다 하하
새로운 메소드를 발견!
new Set()
: Set 객체는 자료형에 관계 없이 원시 값과 객체 참조 모두 유일한 값을 저장할 수 있습니다.
예를 들어, 반복되는 문자가 있다면 그것을 빼고 유일한 문자들을 담아 객체로 반환하는 것이다.
let str = "aabbccddefg";
console.log(new Set(str)) // Set(7) {'a', 'b', 'c', 'd', 'e', …} 객체값으로 나온다.
따라서 위의 문제를 위해서는 spread
로 펼쳐서 객체 안에 담아주어서 풀어야 한다. 이 방법을 보고 머리를 탁 쳤다! 🤭
const longest = (s1, s2) => [...new Set(s1+s2)].sort().join('')