[Programmers] #181911 - 부분 문자열 이어 붙여 문자열 만들기 [Java][C++][Python]
구간 지정에 따라 부분 문자열을 잘라 이어 붙이는 워밍업 문제.
[Programmers] #181911 - 부분 문자열 이어 붙여 문자열 만들기 [Java][C++][Python]
1. 아이디어
my_strings[i]에서 parts[i] = [s, e]가 가리키는 인덱스 s부터 e까지(양 끝 포함)의 부분 문자열을 잘라내고, 이를 순서대로 이어 붙이면 답이 되는 문제다. e가 포함되는 구간이므로 부분 문자열을 자를 때는 끝 인덱스에 1을 더한 [s, e + 1) 구간으로 잘라야 한다.
2. 복잡도
| 접근 | 시간 | 공간 |
|---|---|---|
| 풀이 | $O(N \times L)$ | $O(N \times L)$ |
($N$ = my_strings의 길이, $L$ = 각 문자열의 최대 길이)
3. 코드
풀이 [Java][C++][Python]
1
2
3
4
5
6
7
8
9
10
class Solution {
public String solution(String[] my_strings, int[][] parts) {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < my_strings.length; i++) {
sb.append(my_strings[i], parts[i][0], parts[i][1] + 1);
}
return sb.toString();
}
}
1
2
3
4
5
6
7
8
9
10
11
#include <bits/stdc++.h>
using namespace std;
string solution(vector<string> my_strings, vector<vector<int>> parts) {
string s;
for (int i = 0; i < my_strings.size(); i++) {
s += my_strings[i].substr(parts[i][0], parts[i][1] - parts[i][0] + 1);
}
return s;
}
1
2
def solution(my_strings, parts):
return "".join(s[a : b + 1] for s, (a, b) in zip(my_strings, parts))
This post is licensed under CC BY 4.0 by the author.