Skip to content

Commit b341b04

Browse files
committed
2020.02.23
1 parent d921708 commit b341b04

File tree

7 files changed

+211
-3
lines changed

7 files changed

+211
-3
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
.vscode
22
*.exe
3+
a.out
34
in.txt

README.md

+6-3
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,6 @@
3535
| 0029 | 字符串加解密 | [Accepted](huawei/0029.cpp) | |
3636
| 0030 | 字符串合并处理 | [Accepted](huawei/0030.cpp) | |
3737
| 0031 | 【中级】单词倒排 | [Accepted](huawei/0031.cpp) | |
38-
| 0032 | 字符串运用-密码截 | [Accepted](huawei/0032.cpp) | |
3938
| 0033 | 整数与IP地址间的转换 | [Accepted](huawei/0033.cpp) | |
4039
| 0034 | 图片整理 | [Accepted](huawei/0034.cpp) | |
4140
| 0035 | 蛇形矩阵 | [Accepted](huawei/0035.cpp) | |
@@ -44,7 +43,7 @@
4443
| 0038 | 求小球落地5次后所经历的路程和第5次反弹的高度 | [Accepted](huawei/0038.cpp) | |
4544
| 0039 | 判断两个IP是否属于同一子网 | [Accepted](huawei/0039.cpp) | [题目不见]( )|
4645
| 0040 | 输入一行字符,分别统计出包含英文字母、空格、数字和其它字符的个数 | [Accepted](huawei/0040.cpp) | |
47-
| 0041 | 称砝 | [Accepted](huawei/0041.cpp) | |
46+
| 0041 | 称砝码 | [Accepted](huawei/0041.cpp) | |
4847
| 0042 | 学英语 | [Accepted](huawei/0042.cpp) | |
4948
| 0043 | 迷宫问题 | [Accepted](huawei/0043.cpp) | [树的遍历]( )|
5049
| 0044 | Sudoku-Java | [Accepted](huawei/0044.cpp) | |
@@ -55,6 +54,7 @@
5554
| 0049 | 多线程 | [Accepted](huawei/0049.cpp) | |
5655
| 0050 | 四则运算 | [Accepted](huawei/0050.cpp) | |
5756
| 0051 | 输出单向链表中倒数第k个结点 | [Accepted](huawei/0051.cpp) | |
57+
| 0052 | 计算字符串的距离 | [Accepted](huawei/0052.cpp) | |
5858
| 0053 | iNOC产品部-杨辉三角的变形 | [Accepted](huawei/0053.cpp) | |
5959
| 0054 | 表达式求值 | [Accepted](huawei/0054.cpp) | |
6060
| 0055 | (练习用)挑7 | [Accepted](huawei/0055.cpp) | |
@@ -67,6 +67,7 @@
6767
| 0062 | 查找输入整数二进制中1的个数 | [Accepted](huawei/0062.cpp) | |
6868
| 0063 | DNA序列 | [Accepted](huawei/0063.cpp) | |
6969
| 0064 | MP3光标位置 | [Accepted](huawei/0064.cpp) | |
70+
| 0065 | 查找两个字符串a,b中的最长公共子串 | [Accepted](huawei/0065.cpp) | |
7071
| 0066 | 配置文件恢复 | [Accepted](huawei/0066.cpp) | |
7172
| 0067 | 24点游戏算法 | [Accepted](huawei/0067.cpp) | |
7273
| 0068 | 成绩排序 | [Accepted](huawei/0068.cpp) | |
@@ -75,14 +76,16 @@
7576
| 0072 | 百钱买百鸡问题 | [Accepted](huawei/0072.cpp) | |
7677
| 0073 | 计算日期到天数转换 | [Accepted](huawei/0073.cpp) | |
7778
| 0074 | 参数解析 | [Accepted](huawei/0074.cpp) | |
79+
| 0075 | 公共字串计算 | [Accepted](huawei/0075.cpp) | |
7880
| 0076 | 尼科彻斯定理 | [Accepted](huawei/0076.cpp) | |
81+
| 0077 | 火车进站 | [Accepted](huawei/0077.cpp) | |
7982
| 0078 | 超长正整数相加 | [Accepted](huawei/0078.cpp) | [模拟加法]( )|
83+
| 0079 | 计算字符串的相似度 | [Accepted](huawei/0079.cpp) | |
8084
| 0080 | 整形数组合并 | [Accepted](huawei/0080.cpp) | |
8185
| 0081 | 字符串匹配 | [Accepted](huawei/0081.cpp) | |
8286
| 0082 | 将真分数分解为埃及分数 | [Accepted](huawei/0082.cpp) | |
8387
| 0083 | 二维数组操作 | [Accepted](huawei/0083.cpp) | |
8488
| 0083 | 统计大写字母个数 | [Accepted](huawei/0084.cpp) | |
85-
| 0085 | 字符串运用-密码截取 | [Accepted](huawei/0085.cpp) | |
8689
| 0086 | 求最大连续bit数 | [Accepted](huawei/0086.cpp) | |
8790
| 0087 | 密码强度等级 | [Accepted](huawei/0087.cpp) | |
8891
| 0088 | 扑克牌大小 | [Accepted](huawei/0088.cpp) | |

huawei/0041.cpp

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// 0041.称砝码
2+
3+
#include <iostream>
4+
#include <vector>
5+
#include <set>
6+
using namespace std;
7+
8+
int main()
9+
{
10+
int n, a[10], tmp;
11+
while (cin >> n)
12+
{
13+
vector<int> v;
14+
set<int> s;
15+
for(int i = 0; i < n; i++) cin >> a[i];
16+
for(int i = 0; i < n; i++)
17+
{
18+
cin >> tmp;
19+
for(int j = 0; j < tmp; j++) v.push_back(a[i]);
20+
}
21+
s.insert(0);
22+
for(int i = 0; i < v.size(); i++)
23+
{
24+
set<int> t(s);
25+
for(auto it = t.begin(); it != t.end(); it ++)
26+
{
27+
s.insert(*it + v[i]);
28+
}
29+
}
30+
cout << s.size() << endl;
31+
}
32+
return 0;
33+
}

huawei/0052.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// 0052.计算字符串的距离
2+
3+
#include <iostream>
4+
#include <cmath>
5+
using namespace std;
6+
7+
int findMin(int a, int b, int c)
8+
{
9+
a = min(a, b);
10+
b = min(b, c);
11+
return min(a, b);
12+
}
13+
14+
int levenshtein(string a, string b)
15+
{
16+
a.insert(0, 1,' ');
17+
b.insert(0, 1, ' ');
18+
int n = a.size(), m = b.size();
19+
int cost, lev[n][m];
20+
for(int i = 0; i < n; i++) lev[i][0] = i;
21+
for(int j = 0; j < m; j++) lev[0][j] = j;
22+
for(int i = 1; i < n; i++)
23+
{
24+
for(int j = 1; j < m; j++)
25+
{
26+
if(a[i] == b[j]) cost = 0;
27+
else cost = 1;
28+
lev[i][j] = findMin(lev[i][j-1]+1,
29+
lev[i-1][j]+1, lev[i-1][j-1]+cost);
30+
}
31+
}
32+
return lev[n-1][m-1];
33+
}
34+
35+
int main()
36+
{
37+
string a, b;
38+
while(cin >> a >> b)
39+
{
40+
cout << levenshtein(a, b) << endl;
41+
}
42+
return 0;
43+
}

huawei/0065.cpp

+47
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
// 0065.查找两个字符串a,b中的最长公共子串
2+
3+
#include <iostream>
4+
using namespace std;
5+
6+
int lcs(string a, string b)
7+
{
8+
if(a.size() > b.size()) {
9+
string tmp = a;
10+
a = b;
11+
b = tmp;
12+
}
13+
a.insert(0, 1, ' ');
14+
b.insert(0, 1, ' ');
15+
int n = a.size(), m = b.size();
16+
int dp[n][m];
17+
int maxLen = 0, last;
18+
for(int i = 0; i < n; i++) dp[i][0] = 0;
19+
for(int j = 0; j < m; j++) dp[0][j] = 0;
20+
for(int i = 1; i < n; i++)
21+
{
22+
for(int j = 1; j < m; j++)
23+
{
24+
if(a[i] == b[j]) {
25+
dp[i][j] = dp[i-1][j-1] + 1;
26+
if(maxLen < dp[i][j]) {
27+
maxLen = dp[i][j];
28+
last = i;
29+
}
30+
} else {
31+
dp[i][j] = 0;
32+
}
33+
}
34+
}
35+
cout << a.substr(last-maxLen+1, maxLen) << endl;
36+
return maxLen;
37+
}
38+
39+
int main()
40+
{
41+
string a, b;
42+
while(cin >> a >> b)
43+
{
44+
lcs(a, b);
45+
}
46+
return 0;
47+
}

huawei/0075.cpp

+38
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// 0075.公共字串计算
2+
3+
#include <iostream>
4+
using namespace std;
5+
6+
int lcs(string a, string b)
7+
{
8+
int maxLen = 0;
9+
a.insert(0, 1, ' ');
10+
b.insert(0, 1, ' ');
11+
int n = a.size(), m = b.size();
12+
int dp[n][m];
13+
for(int i = 0; i < n; i++) dp[i][0] = 0;
14+
for(int j = 0; j < m; j++) dp[0][j] = 0;
15+
for(int i = 1; i < n; i++)
16+
{
17+
for(int j = 1; j < m; j++)
18+
{
19+
if(a[i] == b[j]) {
20+
dp[i][j] = dp[i-1][j-1] + 1;
21+
maxLen = max(maxLen, dp[i][j]);
22+
} else {
23+
dp[i][j] = 0;
24+
}
25+
}
26+
}
27+
return maxLen;
28+
}
29+
30+
int main()
31+
{
32+
string a, b;
33+
while(cin >> a >> b)
34+
{
35+
cout << lcs(a, b) << endl;
36+
}
37+
return 0;
38+
}

huawei/0079.cpp

+43
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
// 0079.计算字符串的相似度
2+
3+
#include <iostream>
4+
#include <cmath>
5+
using namespace std;
6+
7+
int findMin(int a, int b, int c)
8+
{
9+
a = min(a, b);
10+
b = min(b, c);
11+
return min(a, b);
12+
}
13+
14+
int levenshtein(string a, string b)
15+
{
16+
a.insert(0, 1,' ');
17+
b.insert(0, 1, ' ');
18+
int n = a.size(), m = b.size();
19+
int cost, lev[n][m];
20+
for(int i = 0; i < n; i++) lev[i][0] = i;
21+
for(int j = 0; j < m; j++) lev[0][j] = j;
22+
for(int i = 1; i < n; i++)
23+
{
24+
for(int j = 1; j < m; j++)
25+
{
26+
if(a[i] == b[j]) cost = 0;
27+
else cost = 1;
28+
lev[i][j] = findMin(lev[i][j-1]+1,
29+
lev[i-1][j]+1, lev[i-1][j-1]+cost);
30+
}
31+
}
32+
return lev[n-1][m-1];
33+
}
34+
35+
int main()
36+
{
37+
string a, b;
38+
while(cin >> a >> b)
39+
{
40+
cout << "1/" << levenshtein(a, b) + 1 << endl;
41+
}
42+
return 0;
43+
}

0 commit comments

Comments
 (0)