一、程序阅读
#include <iostream> #include <vector> #include <algorithm> using namespace std; int f(string x, string y) { int m = x.size(); int n = y.size(); vector<vector<int>>v(m + 1, vector<int>(n + 1, 0)); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { if (x[i - 1] == y[j - 1]) { v[i][j] = v[i - 1][j - 1] + 1; } else { v[i][j] = max(v[i - 1][j], v[i][j - 1]); } } } return v[m][n]; } bool g(string x, string y) { if (x.size() != y.size()) { return false; } return f(x + x, y) == y.size(); } int main() { string x, y; cin >> x >> y; cout << g(x, y) << endl; return 0; }
二、代码分析 + 题目解析
判断题
1. f 函数的返回值小于等于 min{n,m}。(对)【每一行的最后一个最多比上一行多1】
2. f 函数的返回值等于两个输入字符串的最长公共子串的长度。(错)【是两个字符串的公共子序列,不一定连续】
3. f 当输入两个完全相同的字符串时,
g
函数的返回值总是true
。(对)【因为 x 中一定包含完整的 y】单选题
1. 将第19行中的
v[m][n]
替换为v[n][m]
,那么该程序(D)。A. 行为不变
B. 只会改变输出
【可能越界】
C. 一定非正常退出
D. 可能非正常退出2. 当输入为
csp-j p-jcs
时,输出为(B)。A. 0
B. 1
C. T
D. F【
5 == 5,返回true,输出为1。注意,不是 T】
3. 当输入为
csppsc spsccp
时,输出为()。A. T
B. F
C. 0
D. 1【
6 == 6,返回true,输出为1。注意,不是 T】