1. 项目背景与核心价值
最近在整理C++机试题目时,发现t100-t103这组题目特别适合用来检验基础算法和数据结构的掌握程度。这四道题涵盖了字符串处理、动态规划、图论等经典题型,都是大厂笔试中的高频考点。我在实际面试辅导中发现,很多候选人在面对这类题目时容易陷入"知道思路但写不出完整代码"的困境。
这组题目最精妙的地方在于,它们表面看起来是独立的四道题,但实际上存在递进关系。t100考察基础编码能力,t101增加时间复杂度要求,t102引入空间优化思路,t103则综合前三个问题的技巧。这种设计方式与真实面试中的题目演进逻辑高度一致。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 题目详解与解题思路
2.1 T100:字符串模式匹配
题目要求实现一个支持通配符的字符串匹配函数,其中'?'匹配任意单个字符,'*'匹配任意长度字符串(包括空串)。这是LeetCode 44题的变种,也是实际开发中文件搜索功能的简化版。
暴力递归解法时间复杂度O(2^(m+n)),显然无法通过。正确的DP解法需要构建(m+1)*(n+1)的二维数组:
cpp复制bool isMatch(string s, string p) {
int m = s.size(), n = p.size();
vector<vector<bool>> dp(m+1, vector<bool>(n+1, false));
dp[0][0] = true;
for(int j=1; j<=n; j++) {
if(p[j-1] == '*') dp[0][j] = dp[0][j-1];
}
for(int i=1; i<=m; i++) {
for(int j=1; j<=n; j++) {
if(p[j-1] == '*') {
dp[i][j] = dp[i][j-1] || dp[i-1][j];
} else if(p[j-1] == '?' || s[i-1] == p[j-1]) {
dp[i][j] = dp[i-1][j-1];
}
}
