HDU2572 终曲【字符串匹配】

终曲

Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2962 Accepted Submission(s): 977

Problem Description
最后的挑战终于到了!
站在yifenfei和MM面前的只剩下邪恶的大魔王lemon一人了!战胜他,yifenfei就能顺利救出MM。
Yifenfei和魔王lemon的挑战很简单:由lemon给出三个字符串,然后要yifenfei说出第一串的某个子串,要求该子串长度最小,并且同时包含第2个串和第3个串。
特别地,如果有多个这样的子串,则请输出字母序最小的一个。
在这里插入图片描述

Input
输入数据首先是一个整数C,表示测试数据有C组;
接着是C组数据,每组包含三行字符串,第一个字符串长度大于1小于100
后面两个串的长度大于1且小于10

Output
请对应每组输入数据输出满足条件的最短子串;
如果没有,请输出 No

Sample Input
2
abcd
ab
bc
abc
ab
bd

Sample Output
abc
No

Author
yifenfei

Source
ACM程序设计期末考试081230

问题链接HDU2572 终曲
问题简述:(略)
问题分析:一般而言,有关字符串匹配的问题会使用像KMP那样的算法来解决。然而,C++的字符串类中的方法(函数)应该会使用像KMP那样的算法,所以直接使用字符串类中的方法(函数)可以解决绝大部分问题。
程序说明:使用了若干字符串类的方法(函数)来解决字符串匹配问题。看代码,不解释。
参考链接:(略)
题记:经典的字符串匹配解法。

AC的C++语言程序如下:

/* HDU2572 终曲 */

#include <bits/stdc++.h>

using namespace std;

int main()
{
    int t;
    string s1, s2, s3;

    cin >> t;
    while(t--) {
        cin >> s1 >> s2 >> s3;

        int p2 = s1.find(s2);
        int p3 =  s1.find(s3);

        if(p2 == (int)string::npos || p3 == (int)string::npos)
            cout << "No" << endl;
        else if(s2.find(s3) != string::npos)
            cout << s2 << endl;
        else if(s3.find(s2) != string::npos)
            cout << s3 << endl;
        else {
            string ans(s1);
            // 算出子串最短长度
            int minlen = min(s2.length(), s3.length());
            // 枚举长度和起点
            int len = s1.size();
            for(int i = minlen; i <= len; i++) {
                for(int j = 0; j <= len - i; j++) {
                    string t = s1.substr(j, i);
                    if(t.find(s2) != string::npos && t.find(s3) != string::npos) {
                        if(t.size() < ans.size() || (t.size() == ans.size() && t < ans))
                            ans = t;
                    }
                }
                if(ans != s1) break;    // 某长度找到解就不必找更长的解
            }
            cout << ans << endl;
        }

    }

    return 0;
}
原创文章 2323 获赞 2382 访问量 269万+

猜你喜欢

转载自blog.csdn.net/tigerisland45/article/details/105852280
今日推荐