美团笔试 美团笔试题 0427
笔试时间:2024年04月27日
历史笔试传送门:2023秋招笔试合集
第一题
题目:小美换团
小美拿到了一个字符串,她准备把其中所有的"mei"子串替换为"tuan"子串,你能帮帮她吗?
输入描述
一个仅由小写字母组成的字符串。长度不超100000。
输出描述
修改后的字符串。
样例输入
meituan
样例输出
tuantuan
参考题解
模拟。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <string>
int main() {
std::string s;
std::getline(std::cin, s);
size_t pos = 0;
std::string to_replace = "mei";
std::string replace_with = "tuan";
while ((pos = s.find(to_replace, pos)) != std::string::npos) {
s.replace(pos, to_replace.length(), replace_with);
pos += replace_with.length();
}
std::cout << s << std::endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.Scanner;
public class ReplaceString {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
scanner.close();
s = s.replace("mei", "tuan");
System.out.println(s);
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
s = input().replace("mei","tuan")
print(s)
第二题
题目:小美的特殊矩形
小美拿到了一个字符矩阵,她定义一个矩形区域是“特殊的”,当且仅当这个矩形区域中没有两个相同的字符。 现在小美想知道,有多少个2行2列的矩阵区域是特殊的?
输入描述
第一行输入两个正整数n,m,代表矩阵的行数和列数。
接下来的n行,每行输入一个长度为m的、仅由小写字母组成的字符串,代表小美拿到的字符矩阵。
1<=n,m<=200
输出描述
一个整数,代表"特殊的"矩形区域的数量。
样例输入
2 3
abb
aac
样例输出
0
参考题解
模拟题。 直接枚举所有的2*2的子矩阵,判断是否存在重复的字符即可。
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
#include <set>
int main() {
int n, m;
std::cin >> n >> m;
std::vector<std::vector<char>> matrix(n, std::vector<char>(m));
// 读取矩阵
for (int i = 0; i < n; ++i) {
for (int j = 0; j < m; ++j) {
std::cin >> matrix[i][j];
}
}
int res = 0;
// 遍历矩阵,检查2x2子矩阵
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < m - 1; ++j) {
std::set<char> s;
for (int x = 0; x < 2; ++x) {
for (int y = 0; y < 2; ++y) {
s.insert(matrix[i + x][j + y]);
}
}
if (s.size() == 4) {
++res;
}
}
}
std::cout << res << std::endl;
return 0;
}
Java:[此代码未进行大量数据的测试,仅供参考]
import java.util.HashSet;
import java.util.Scanner;
import java.util.Set;
public class MatrixSubMatrix {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int m = scanner.nextInt();
scanner.nextLine(); // 读取换行符
char[][] matrix = new char[n][m];
// 读取矩阵
for (int i = 0; i < n; ++i) {
String line = scanner.nextLine();
for (int j = 0; j < m; ++j) {
matrix[i][j] = line.charAt(j);
}
}
int res = 0;
// 遍历矩阵,检查2x2子矩阵
for (int i = 0; i < n - 1; ++i) {
for (int j = 0; j < m - 1; ++j) {
Set<Character> s = new HashSet<>();
for (int x = 0; x < 2; ++x) {
for (int y = 0; y < 2; ++y) {
s.add(matrix[i + x][j + y]);
}
}
if (s.size() == 4) {
++res;
}
}
}
System.out.println(res);
scanner.close();
}
}
Python:[此代码未进行大量数据的测试,仅供参考]
n,m = list(map(int,input().split()))
matrix = [list(input()) for _ in range(n)]
res = 0
for i in range(n-1):
for j in range(m-1):
s = set()
for x in range(2):
for y in range(2):
s.add(matrix[i+x][j+y])
if len(s) == 4:
res += 1
print(res)
第三题
题目:小美的数组合并
小美拿到了一个数组,她每次操作可以将两个相邻元素ai合并为一个元素,合并后的元素为原来两个元素之和。小美希望最终数组的最小值不小于k。她想知道有多少种不同的合并结果?
输入描述
第一行输入两个正整数n,k,代表数组大小和数组的最大值。
第二行输入个正整数ai,代表小美拿到的数组。
1<=n,k,ai<=200
输出描述
输出一个整数,代表小美可以得到多少种不同的结果。由于结果可能很大,输出对10^9+7取模的结果。
样例输入
4 4
2 3 4 5
样例输出
4
说明
可能得到的数组有:[5,4,5]、[9,5]、[5,9]、[14]这四种。
参考题解
动态规划
C++:[此代码未进行大量数据的测试,仅供参考]
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
const int MOD = 1e9 + 7;
vector<vector<int>> dp;
vector<int> arr;
int n, k;
int dfs(int i, int p) {
if (i == n) {
return p >= k ? 1 : 0;
}
if (dp[i][p] != -1) {
return dp[i][p];
}
int cnt = 0;
if (p >= k) {
cnt += dfs(i + 1, arr[i]);
cnt %= MOD;
cnt += dfs(i + 1, p + arr[i]);
cnt %= MOD;
} else
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
持续收录字节、腾讯、阿里、美团、美团、拼多多、华为等笔试题解,包含python、C++、Java多种语言版本,持续更新中。