题目来源:2023年华为笔试面试机考真题100道(C/C++语言)_华为机试真题_Gabriel.Tian的博客-CSDN博客
仅当作练习,没有办法运行判断是否完全ac,仅用来记录思路
1. 字符串比较
用动态规划,dp[i][0]代表到下标为i的位置,最长的长度是多少;dp[i][1]代表到下标为i的位置,最长长度的和是多少
#include <iostream>
#include <string>
#include <vector>
#include <math.h>
#include <algorithm>
#include <stack>
#include <queue>
using namespace std;
int main(void) {
string A,B;
cin >> A;
cin >> B;
int V;
cin >> V;
int result = 0;
vector<vector<int> > dp(A.size(),vector<int>(2,0));
if(abs(A[0] - B[0]) < V)
{
dp[0][0] = 1;
dp[0][1] = abs(A[0] - B[0]);
}
for(int i = 1; i < A.size(); i++)
{
if(dp[i-1][1] + abs(A[i] - B[i]) < V)
{
dp[i][0] = dp[i-1][0]+1;
dp[i][1] = dp[i-1][1] + abs(A[i] - B[i]);
}else if(abs(A[i] - B[i]) < V)
{
dp[i][0] = 1;
dp[i][1] = abs(A[i] - B[i]);
}
if(dp[i][0] > result)
result = dp[i][0];
}
cout << result << endl;
return 0;
}