2020阿里笔试题解(9.11)

2020年阿里笔试中包含两道题目,第一题涉及计算字符串中匹配子串的次数,通过预处理子串信息并使用map统计匹配次数。第二题要求处理矩阵中的连通块,将其替换为相邻非-1元素的平均值向下取整。题目难度适中,关键在于理解并有效处理连通块问题。
摘要由CSDN通过智能技术生成

一个小时两道题,感觉难度也没有传说中的那么大,第二题稍微卡了一会,但是还是做完了

第一题

题意

有一个长度为n的全是小写字母的字符串,有m个要匹配的字符串,问一共能匹配多少次。
例如ababa,2个匹配字符串ab和aba,共能匹配4次。ab2次,aba两次。
数据范围n和m为1e5,匹配字符串长度为[2,10]。

分析

因为匹配字符串长度很短,因此完全可以计算所有的长度为[2,10]的子串的个数,然后用map来存,然后将m个匹配字符串的个数相加即可。

参考代码

#include <cstdio>
#include <iostream>
#include <string>
#include <unordered_map>
using namespace std;

int n, m;
unordered_map<string, int> M;
string s, t;

int main() {
   
	cin >> n >> m;
	cin >> s;
	int len = s.length();
	for (int i=0; i<len; ++i) {
   
		for (int j=2; j<=10 && i+j-1<len; ++j) {
   
			M[s.substr(i, j)]++;
		}
	}
	int ans = 0;
	for (int i=0; i<m; ++i) {
   
		cin >> t;
		ans += M[t];
	}
	cout << ans << endl;
	return 0;
}

第二题

题意

给一个矩阵,其中值为-1的部分需要替换,如果为-1的部分上下左右相连可以组成连通块,每个连通块中的值都应该被替换成这与这个连通块直接相连的非-1部分的平均值向下取整。
例如:

5 4
0 8 -1 0
0 0 8 0
0 8 8 0
0 8 0 -1
0 -1 -1 0

输出:

0 8 5 0
0 0 8 0
0 8 8 0
0 8 0 0
0 2 2 0

矩阵中有三个连通块:
第一个:{(1,3)},与其直接相连的数有{8, 8, 0},求平均向下取整为5
第二个:{(4,4)},与其直接相连的数有{0, 0, 0},求平均向下取整为0
第三个:{(5,2), {5,3)},与其直接相连的数有{0, 8, 8, 0},求平均向下取整为2

分析

第一步肯定是先求连通块,然后给连通块编号。然后遍历每一个非连通块的值,判断其是否属于某一个连通块,并用sum和num计算每个连通块周围非-1的总和,以及个数。

参考代码

#include
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值