`while`문으로 풀어봤습니다.
안녕하세요 선생님! 매번 질 좋은 강의 해주셔서 감사합니다. 다름이 아니라 강의 코드와는 다르게 `while`문으로 투포인터를 이용했는데 다음과 같은 코드도 괜찮은 코드인지 여쭤보고 싶습니다!
let s = "bacaAacba";
let t = "abc";
console.log(solution(s, t));
function solution(s, t) {
let n = s.length;
let m = t.length;
let sum = "";
let lt = rt = cnt = 0;
while (rt < n) {
sum += s[rt];
if (rt - lt + 1 >= m) {
let sH = new Map();
let temp = sum;
let flag = true;
for (let x of temp) {
if (sH.has(x)) sH.set(x, sH.get(x) + 1);
else sH.set(x, 1);
}
for (x of t) {
if (!sH.has(x) || sH.get(x) === 0) flag = false;
sH.set(x, sH.get(x) - 1);
}
if (flag) cnt++;
sum = sum.slice(1);
lt++;
}
rt++;
}
return cnt;
}
답변 1
0
안녕하세요^^
스스로 이정도 코드를 짠 것도 대단하신 겁니다.
아래 코드는 O(n)으로 짠 코드이니 분석해보세요. 개선코드영상을 빨리 찍어야 겠네요.
function solution(s, t){
let answer=0;
let sH = new Map();
for(let x of t){
sH.set(x, (sH.get(x) || 0)-1);
}
let len=t.length-1;
for(let i=0; i<len; i++){
sH.set(s[i], (sH.get(s[i]) || 0)+1);
if(sH.get(s[i])===0) sH.delete(s[i]);
}
let lt=0;
for(let rt=len; rt<s.length; rt++){
sH.set(s[rt], (sH.get(s[rt]) || 0)+1);
if(sH.get(s[rt])===0) sH.delete(s[rt]);
if(sH.size===0) answer++;
sH.set(s[lt], (sH.get(s[lt]) || 0)-1);
if(sH.get(s[lt])===0) sH.delete(s[lt]);
lt++;
}
return answer;
}
console.log(solution("bacacbcba", "abc"));
continue를 사용하는 이유
0
101
2
정렬 가능 여부 판단하기
0
80
2
알고리즘 학습법 관련해서 질문드립니다.
0
96
1
코드 리뷰 부탁드립니다!
0
107
1
indexOf를 사용해서 풀어보았습니다 !!
0
75
1
저는 이런식으로 구현 해보았습니다 !!
0
69
1
12,13,14 강의 소리만 나오고 검은 화면입니다
0
110
3
반복문 최소화하고 indexOf 사용해서 풀어봤습니다
0
74
1
영상 보기 전에 직접 풀어봤습니다.
0
79
1
섹션1의 17번문제 이 풀이로 풀어도 될까요?
0
142
2
정규표현식으로 처리해도 상관없나요 ?
0
127
2
3칸씩 건너뛸 수 있을 경우
0
132
2
강의에 대해 질문있습니다.
0
144
2
Object와 Set을 이용해 풀어봤습니다.
0
128
2
이렇게 해도 되나요?
0
107
2
선생님 중복 단어나 중복관련 문제들은 set을 이용하면 좋을것 같습니다.
0
149
2
이렇게 풀어도 괜찮을까요?
0
146
1
이렇게 풀어도 괜찮을까요?
0
125
1
모든 아나그램 찾기에서 시간복잡도
0
106
1
코드리뷰 부탁드립니다.
0
138
1
for loop 탈출은 return 문으로 해도 되지 않나요?
0
134
1
투포인트알고리즘으로 풀어봤습니다.
0
147
0
코드 리뷰 부탁드립니다.
0
121
1
코드 맞게 작성한 거 아닌가여??
0
150
1





