Skip to content

Commit 99c0faf

Browse files
committed
Add 941-944
1 parent c6eb832 commit 99c0faf

File tree

5 files changed

+160
-1
lines changed

5 files changed

+160
-1
lines changed
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
class Solution {
2+
public:
3+
bool validMountainArray(vector<int>& A) {
4+
if(A.size()<3)
5+
return false;
6+
int last = A[0];
7+
int i;
8+
for(i=1;i<A.size();i++){
9+
if(A[i]>last){
10+
last = A[i];
11+
}else{
12+
break;
13+
}
14+
}
15+
if(i-1==0 || i-1==A.size()-1)
16+
return false;
17+
for(i;i<A.size();i++){
18+
if(A[i]>=last)
19+
return false;
20+
last = A[i];
21+
}
22+
return true;
23+
}
24+
};
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
class Solution {
2+
public:
3+
vector<int> diStringMatch(string S) {
4+
int counti = 0, countd = 0;
5+
for(auto c:S){
6+
if(c == 'I')
7+
counti++;
8+
}
9+
countd = S.size()-counti;
10+
11+
vector<int> A(S.size()+1);
12+
int iflag = countd, dflag = countd-1;
13+
if(S[0] == 'I'){
14+
A[0] = 0;
15+
iflag ++;
16+
dflag ++;
17+
}else{
18+
A[0] = A.size()-1;
19+
}
20+
for(int i=0;i<S.size();i++){
21+
if(S[i] == 'I'){
22+
A[i+1] = iflag;
23+
iflag += 1;
24+
}else{
25+
A[i+1] = dflag;
26+
dflag -= 1;
27+
}
28+
}
29+
return A;
30+
}
31+
};
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
class Solution {
2+
public:
3+
int count_overlap(string &a, string &b){
4+
int s = min(a.size(),b.size());
5+
for(int i=s;i>0;i--){
6+
if(a.substr(a.size()-i) == b.substr(0,i))
7+
return i;
8+
}
9+
return 0;
10+
}
11+
12+
int search(vector<string>& A, vector<vector<int> > &overlap, vector<bool> &used, int used_count, vector<int> &shortest_super, int &shortest_super_size, vector<int> &cur_super, int cur_super_size){
13+
// 所有字符串用完,和最短的super比较
14+
if(used_count == used.size()){
15+
if(cur_super_size < shortest_super_size){
16+
shortest_super = cur_super;
17+
shortest_super_size = cur_super_size;
18+
}
19+
return 0;
20+
}
21+
22+
// 剪枝
23+
if(cur_super_size >= shortest_super_size)
24+
return 0;
25+
26+
// 搜索
27+
for(int i=0;i<A.size();i++){
28+
if(!used[i]){
29+
used[i] = true;
30+
cur_super_size += A[i].size() - overlap[cur_super.back()][i];
31+
cur_super.push_back(i);
32+
search(A, overlap, used, used_count+1, shortest_super, shortest_super_size, cur_super, cur_super_size);
33+
cur_super.pop_back();
34+
cur_super_size -= A[i].size() - overlap[cur_super.back()][i];
35+
used[i] = false;
36+
}
37+
}
38+
return 0;
39+
}
40+
41+
string shortestSuperstring(vector<string>& A) {
42+
// 计算两两之间的重叠
43+
vector<vector<int> > overlap(A.size(),vector<int>(A.size()));
44+
for(int i=0;i<overlap.size();i++){
45+
for(int j=i+1;j<overlap[0].size();j++){
46+
overlap[i][j] = count_overlap(A[i],A[j]);
47+
overlap[j][i] = count_overlap(A[j],A[i]);
48+
}
49+
}
50+
51+
// 最短的super,只存下标
52+
vector<int> shortest_super;
53+
// 最短的super对应的长度
54+
int shortest_super_size = INT_MAX;
55+
// 当前super,只存下标
56+
vector<int> cur_super;
57+
// 标记已使用的字符串
58+
vector<bool> used(A.size(),false);
59+
60+
for(int i=0;i<A.size();i++){
61+
used[i] = true;
62+
cur_super.push_back(i);
63+
search(A, overlap, used, 1, shortest_super, shortest_super_size, cur_super, A[i].size());
64+
cur_super.pop_back();
65+
used[i] = false;
66+
}
67+
68+
// 根据下标,重建字符串
69+
string shortest = A[shortest_super[0]];
70+
for(int i=1;i<shortest_super.size();i++){
71+
shortest += A[shortest_super[i]].substr(overlap[shortest_super[i-1]][shortest_super[i]]);
72+
}
73+
return shortest;
74+
}
75+
};
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
class Solution {
2+
public:
3+
int minDeletionSize(vector<string>& A) {
4+
string last = A[0];
5+
int len = A[0].size();
6+
int del = 0;
7+
for(int i=1;i<A.size();i++){
8+
for(int j=0;j<len;j++){
9+
if(last[j] != '#'){
10+
if(A[i][j] >= last[j])
11+
last[j] = A[i][j];
12+
else{
13+
last[j] = '#';
14+
del += 1;
15+
}
16+
}
17+
}
18+
}
19+
return del;
20+
}
21+
};

README.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -617,4 +617,12 @@
617617

618618
[939.Minimum-Area-Rectangle](Algorithms/939.Minimum-Area-Rectangle/solution.cpp)
619619

620-
[940.Distinct-Subsequences-II](Algorithms/940.Distinct-Subsequences-II/solution.cpp)
620+
[940.Distinct-Subsequences-II](Algorithms/940.Distinct-Subsequences-II/solution.cpp)
621+
622+
[941.Valid-Mountain-Array](Algorithms/941.Valid-Mountain-Array/solution.cpp)
623+
624+
[942.DI-String-Match](Algorithms/942.DI-String-Match/solution.cpp)
625+
626+
[943.Find-the-Shortest-Superstring](Algorithms/943.Find-the-Shortest-Superstring/solution.cpp)
627+
628+
[944.Delete-Columns-to-Make-Sorted](Algorithms/944.Delete-Columns-to-Make-Sorted/solution.cpp)

0 commit comments

Comments
 (0)