leetcode(리트코드)3월26일 challenge916-Word Subsets
leetcode(리트코드)3월26일 challenge916-Word Subsets
leetcode March 26일 - Word Subsets 문제입니다.
1. 문제
https://leetcode.com/problems/word-subsets/
2. Input , Output
3. 분류 및 난이도
Medium 난이도입니다.
3월 26일자 챌린지 문제입니다.
4. 문제 해석
- B로 들어온 문자열을 모두 가지고 있는 A의 문자열을 찾아 vector에 넣고 반환합니다.
5. code
c++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
class Solution {
public:
vector<string> wordSubsets(vector<string>& A, vector<string>& B) {
//B로들어온 문자열들을 합칠 것입니다.
string temp = "";
//합치기 위한 사전 작업. 'oo'와 같이 2개의 하나의 문자열 안에 동일한 문자가 2개 이상 포함될 경우 처리해주어야 합니다.
int chrcount[26]={0,};
for(size_t i =0;i<B.size();++i)
{
int subcount[26]={0,};
for(size_t j =0;j<B[i].size();++j)
{
subcount[B[i][j]-97]++;
chrcount[B[i][j]-97] = max(subcount[B[i][j]-97], chrcount[B[i][j]-97]);
}
}
//저장된 값들을 이용해서 새로운 문자열을 만듭니다.
for(int i =0;i<26;++i)
{
while(chrcount[i]!=0)
{
temp+=(i+97);
chrcount[i]--;
}
}
//결과 벡터
vector<string> result;
//한번에 비교하기 위해 비교할 두 문자열 모두 정렬합니다.
sort(temp.begin(),temp.end());
for(size_t i =0;i<A.size();++i)
{
bool check=true;
string Atemp = A[i];
sort(Atemp.begin(),Atemp.end());
//subindex는 Atemp를 돌 문자열 j는 temp문자열을 돌 인덱스입니다.
int subindex = 0;
int j = 0;
for(;j<temp.size() && subindex<Atemp.size();)
{
if(Atemp[subindex] == temp[j])
{
++subindex;
++j;
}
else
subindex++;
}
//j가 temp.size() 라는 것은 temp를 다 돌았다는 것이므로 A[i]안에 B가 포함되어 있다는 뜻입니다.
if(j==temp.size())
result.push_back(A[i]);
}
return result;
}
};
6. 결과 및 후기, 개선점
This post is licensed under CC BY 4.0 by the author.