华为机试HJ65:查找两个字符串a,b中的最长公共子串

简介: 华为机试HJ65:查找两个字符串a,b中的最长公共子串

题目描述:

查找两个字符串a,b中的最长公共子串。若有多个,输出在较短串中最先出现的那个。

注:子串的定义:将一个字符串删去前缀和后缀(也可以不删)形成的字符串。请和“子序列”的概念分开!

本题含有多组输入数据!

输入描述:

输入两个字符串

输出描述:

返回重复出现的字符

示例:

输入:

abcdefghijklmnop

abcsafjklmnopqrstuvw


输出:

jklmnop

解题思路:

本题是字符串操作题。输入两个字符串,先判断长短;再从短串开始,先分析短串是否在长串中,若有,则返回;若无,则短串长度-1,即分析短串的两个子串是否在,同理直到找到某个子串符合要求,该子串肯定是符合要求的子串中最长的且最先出现;最后如果两个字符串连字母都没有交集,则返回空串。

测试代码:

#include <iostream>
#include <string>
using namespace std;
string getresult(string s1,string s2)
{
    int lsize=s1.size();
    int ssize=s2.size();
    string result;
    for(int i=ssize;i>=1;--i)
    {
        for(int j=0;j<(ssize-i+1);++j)
        {
            string temp=s2.substr(j,i);
            int id=s1.find(temp);
            if(id!=string::npos)
            {
                return temp;
            }
        }
    }
    return "";
}
int main()
{
    string s1,s2;
    while(cin>>s1>>s2)
    {
        string Long,Short;
        if(s1.size()>s2.size())
        {
            Long=s1;
            Short=s2;
        }
        else{
            Long=s2;
            Short=s1;
        }
        cout<<getresult(Long,Short)<<endl;
    }
    return 0;
}
相关文章
|
8月前
|
算法
华为机试HJ14:字符串排序
华为机试HJ14:字符串排序
|
8月前
|
人工智能
华为机试HJ26:字符串排序
华为机试HJ26:字符串排序
|
1月前
|
索引
《华为机试》——查找两个字符串a,b中的最长公共子串
《华为机试》——查找两个字符串a,b中的最长公共子串
|
8月前
华为机试HJ106:字符逆序
华为机试HJ106:字符逆序
|
8月前
|
容器
华为机试HJ102:字符统计
华为机试HJ102:字符统计
|
8月前
华为机试HJ81:字符串字符匹配
华为机试HJ81:字符串字符匹配
|
8月前
华为机试HJ59:找出字符串中第一个只出现一次的字符
华为机试HJ59:找出字符串中第一个只出现一次的字符
|
8月前
华为机试HJ1:字符串最后一个单词的长度
华为机试HJ1:字符串最后一个单词的长度
|
8月前
华为机试HJ46:截取字符串
华为机试HJ46:截取字符串
|
8月前
华为机试HJ11:数字颠倒
华为机试HJ11:数字颠倒