Skip to content

Commit 7c37273

Browse files
committed
add solution : Encode And Decode Strings
1 parent 0f2d953 commit 7c37273

File tree

1 file changed

+67
-0
lines changed

1 file changed

+67
-0
lines changed

encode-and-decode-strings/mmyeon.ts

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
/*
2+
* 시간복잡도 : O(n)
3+
* - 배열 1회 순회하면서 문자열 합치기
4+
*
5+
* 공간복잡도 : O(1)
6+
*/
7+
function encode(strs: string[]): string {
8+
let result = strs[0];
9+
10+
for (let i = 1; i < strs.length; i++) {
11+
result += "#" + strs[i];
12+
}
13+
return result;
14+
}
15+
/*
16+
* 시간복잡도 : O(n)
17+
* - 문자 순회하면서 # 기준으로 나눔
18+
*
19+
* 공간복잡도 : O(n)
20+
* - 문자열 길이만큼 생성해서 리턴
21+
*/
22+
function decode(encoded: string): string[] {
23+
return encoded.split("#");
24+
}
25+
26+
// 스택 활용하는 방법
27+
/*
28+
* 시간복잡도 : O(n)
29+
*
30+
* 공간복잡도 : O(1)
31+
*/
32+
33+
// ["Hello","World"] => 5#Hello5#World
34+
function encode(strs: string[]): string {
35+
let result = "";
36+
for (const str of strs) {
37+
result += `${str.length}#${str}`;
38+
}
39+
return result;
40+
}
41+
42+
/*
43+
* 접근 방법 :
44+
* - 배열 길이를 포함해서 encode한 뒤 decode할 때 길이 활용헤서 stack에 담는 방식
45+
*
46+
* 시간복잡도 : O(n)
47+
* - 인코딩된 문자열 1회 순회
48+
*
49+
* 공간복잡도 : O(n)
50+
* - n은 result 길이
51+
*/
52+
53+
// 5#Hello5#World => ["Hello","World"]
54+
function decode(encoded: string): string[] {
55+
const result: string[] = [];
56+
let index = 0;
57+
while (index < encoded.length) {
58+
const separatorIndex = encoded.indexOf("#", index);
59+
const length = parseInt(encoded.slice(index, separatorIndex), 10);
60+
index = separatorIndex + 1;
61+
const str = encoded.slice(index, index + length);
62+
result.push(str);
63+
index += length;
64+
}
65+
66+
return result;
67+
}

0 commit comments

Comments
 (0)