文章

1

粉丝

0

获赞

5

访问

92

头像
为什么只有66的通过率,我感觉我的思路没问题,有大神可以讲一下吗
P1730 西安电子科技大学/南京大学机试题
发布于2026年3月20日 20:05
阅读数 92

#include<bits/stdc++.h>
using namespace std;
int main(){
    string s1,s2;
    while(cin>>s1>>s2){
        int len1=s1.size();
        int len2=s2.size();
        vector<vector<int>> dp(len2+1,vector<int>(len1+1,0));
        int best=0,starti=-1,endi=-1,temp;
        for(int i=1;i<=len2;i++){
            for(int j=1;j<=len1;j++){
                if(s2[i-1]==s1[j-1]){
                    dp[i][j]=dp[i-1][j-1]+1;
                    if(dp[i][j]>=best){
         &nbs...

登录查看完整内容


登录后发布评论

1 条评论
snake
2026年3月20日 20:49

要找最后一个出现的,这个逻辑没处理好
 

#include <iostream>
#include <string>
#include <vector>
using namespace std;

int main() {
    string s1, s2;
    while (cin >> s1 >> s2) {
        int len1 = s1.size();
        int len2 = s2.size();
        // dp[i][j] 表示以 s2[i-1] 和 s1[j-1] 结尾的最长公共子串长度
        vector<vector<int>> dp(len2 + 1, vector<int>(len1 + 1, 0));
        int best = 0;          // 最长公共子串长度
        int end_in_s1 = -1;    // 最长子串在 s1 中的结束位置(0‑based)

        for (int i = 1; i <= len2; ++i) {
            for (int j = 1; j <= len1; ++j) {
                if (s2[i - 1] == s1[j - 1]) {
                    dp[i][j] = dp[i - 1][j - 1] + 1;
                    if (dp[i][j] > best) {
                        best = dp[i][j];
                        end_in_s1 = j - 1;            // 记录在 s1 中的结束位置
                    } else if (dp[i][j] == best) {
                        // 长度相等时,取 s1 中更靠后的结束位置
                        if (j - 1 > end_in_s1) {
                            end_in_s1 = j - 1;
                        }
                    }
                } else {
                    dp[i][j] = 0;
                }
            }
        }

        // 输出长度
        cout << best << endl;

        // 输出子串(若长度为 0,则输出空行)
        if (best > 0) {
            // 根据结束位置和长度从 s1 中截取子串
            string sub = s1.substr(end_in_s1 - best + 1, best);
            cout << sub << endl;
        } else {
            cout << endl;   // 长度为 0 时输出空行
        }
    }
    return 0;
}

 

赞(0)
回复给: