Skip to content

Commit 7c584cf

Browse files
committed
solved 2 problems.
1 parent c8d1437 commit 7c584cf

File tree

2 files changed

+144
-0
lines changed
  • 072.Edit Distance/coderfive
  • 085.Maximal Rectangle/coderfive

2 files changed

+144
-0
lines changed

072.Edit Distance/coderfive/72.cc

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
#include <vector>
2+
#include <string>
3+
#include <utility>
4+
#include <iostream>
5+
#include <algorithm>
6+
#include <limits>
7+
#include <numeric>
8+
using namespace std;
9+
10+
class Solution {
11+
public:
12+
int minDistance(string word1, string word2) {
13+
vector<int> v;
14+
for (int i = 0; i <= word1.size(); i++)
15+
v.push_back(i);
16+
for (int j = 0; j < word2.size(); j++) {
17+
int t = v[0];
18+
v[0] = j+1;
19+
for (int i = 0; i < word1.size(); i++) {
20+
int cost;
21+
if (word2[j] == word1[i])
22+
cost = t;
23+
else
24+
cost = min(t, min(v[i], v[i+1]))+1;
25+
t = v[i+1];
26+
v[i+1] = cost;
27+
}
28+
}
29+
return v.back();
30+
}
31+
};
32+
33+
bool err = false;
34+
void do_test (const string& s1, const string& s2, int expected) {
35+
static int counter = 0;
36+
counter++;
37+
string ns1(s1), ns2(s2);
38+
int ret = Solution().minDistance(ns1, ns2);
39+
if (ret != expected) {
40+
err = true;
41+
cout << "#" << counter << "\n"
42+
<< "input: '" << s1 << "', '" << s2 << "'\n"
43+
<< "expected: " << expected << "\n"
44+
<< "ret: " << ret << "\n\n";
45+
}
46+
}
47+
48+
int main() {
49+
do_test ("", "", 0);
50+
do_test ("a", "", 1);
51+
do_test ("", "a", 1);
52+
do_test ("a", "b", 1);
53+
do_test ("ab", "b", 1);
54+
do_test ("ba", "b", 1);
55+
56+
if (!err)
57+
cout << "All tests passed!\n";
58+
59+
return 0;
60+
}

085.Maximal Rectangle/coderfive/85.cc

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
#include <vector>
2+
#include <string>
3+
#include <utility>
4+
#include <iostream>
5+
#include <algorithm>
6+
#include <limits>
7+
#include <numeric>
8+
using namespace std;
9+
10+
template<typename T>
11+
ostream& operator << (ostream& out, const vector<T>& vi) {
12+
out << "{";
13+
if (vi.size() != 0)
14+
out << vi[0];
15+
for (int i = 1; i < vi.size(); i++)
16+
out << ", " << vi[i];
17+
out << "}";
18+
return out;
19+
}
20+
21+
bool err = false;
22+
23+
class Solution {
24+
public:
25+
int maximalRectangle(vector<vector<char>>& matrix) {
26+
if (matrix.size() == 0 || matrix[0].size() == 0) return 0;
27+
int rows = matrix.size(), sz = matrix[0].size();
28+
int res = 0;
29+
vector<int> ht(sz, 0), stack;
30+
stack.reserve(sz);
31+
for (int i = 0; i < rows; i++) {
32+
for (int j = 0; j < sz; j++) {
33+
if (matrix[i][j] == '0')
34+
ht[j] = 0;
35+
else
36+
ht[j]++;
37+
while (stack.size() > 0 && ht[stack.back()] > ht[j]) {
38+
int left, height = ht[stack.back()];
39+
stack.pop_back();
40+
if (stack.size() == 0)
41+
left = -1;
42+
else
43+
left = stack.back();
44+
int area = height * (j-left-1);
45+
if (area > res) res = area;
46+
}
47+
stack.push_back(j);
48+
}
49+
while (stack.size() > 0) {
50+
int left, height = ht[stack.back()];
51+
stack.pop_back();
52+
if (stack.size() == 0)
53+
left = -1;
54+
else
55+
left = stack.back();
56+
int area = height * (sz-left-1);
57+
if (area > res) res = area;
58+
}
59+
}
60+
return res;
61+
}
62+
};
63+
64+
void do_test (const vector<vector<char>>& h, int res) {
65+
vector<vector<char>> copy(h);
66+
int ret = Solution().maximalRectangle(copy);
67+
if (ret != res) {
68+
err = true;
69+
cout << "input: " << copy << "\n"
70+
<< "result: " << ret << ", expected: " << res << "\n\n";
71+
}
72+
}
73+
74+
int main() {
75+
do_test ({{'1'}}, 1);
76+
do_test ({{'0','1','1','0'},{'1','1','1','1'}}, 4);
77+
do_test ({{'0','1','1','0'},{'1','1','1','0'}}, 4);
78+
do_test ({{'0','1','1','1'},{'1','1','1','1'}}, 6);
79+
do_test ({{'0','0','1','0'},{'1','1','1','1'}}, 4);
80+
if (!err)
81+
cout << "All tests passed!\n";
82+
83+
return 0;
84+
}

0 commit comments

Comments
 (0)