Given an arbitrary input string, return the first non-repeated character in the string.
For example:
해쉬 유형의 문제라고 생각하고 문제를 풀었다.
물론 해쉬 유형의 문제는 new Table()
로 선언해 코드를 작성하나, 아직까진 빈 객체에 키가 있는지를 판별해서 값을 더하는 방식으로 푸는게 익숙하다.
빈 객체에 문자열의 문자를 하나씩 넣어주고, 값을 증감하는 방식으로 값을 채운다.
객체는 키와 벨류의 한 쌍으로 이루어진 값들이 채워진다.
for(let x in obj)
로 벨류를 조회해서 1인 값들만 빈 배열로 전달해주었다.
반복되지 않는 가장 첫 문자열을 반환해주면 된다.
(나는 여기서 알파벳 순서대로 리턴하도록 문제를 한 번 더 꼬아주었다. 원 문제대로라면 sort()를 제거하면 된다.)
// 반복되지 않는 첫 번째 문자열 반환하기
// 해쉬
function solution(s) {
let answer = [];
let obj={};
for (let x of s) {
if (obj[x]) {
obj[x] += 1;
} else {
obj[x] = 1;
}
}
for(let key in obj) {
if (obj[key] === 1) {
answer.push(key);
}
}
console.log(answer);
answer.sort();
return answer[0];
}
const s = 'ABA';
const n = 'AABCABD';
const x = 'AABDABC';
console.log(solution(s));
console.log(solution(n));
console.log(solution(x));
가장 처음으로 중복이 없는 문자를 리턴하는 문제이다.
문자열의 문자를 객체에 담고,
위 객체에 없다면 indexOf()를 사용해 중복 문자가 없는지 loop를 돌며 검사한다.
중복 문자가 없는 문자를 발견하면 해당 문자를 리턴한다.
let checked = {};
let strArr = string.split('');
for(let i = 0; i < strArr.length; i++) {
if (!checked[strArr[i]]) {
checked[strArr[i]]= true;
let repeatCharacter = strArr.indexOf(strArr[i], i+1);
if (repeatCharater === -1) {
return strArr[i];
}
}
}
function firstNonRepeatedCharacter (string) {
let low = string.toLoweCase();
let answer = '';
for(let i = 0; i < string.length; i++) {
if(low.indexOf(low[i]) === low.lastIndexOf(low[i])) {
answer = s[i];
}
}
return answer
}