赛码网:分割字符串-求解

原题链接

描述

给出一个n个字符构成的字符串S=s1s2.....sn,从中选出不一定连续的m个字符,按照原来的顺序排好就得到了S的一个子序列,严格地,选出m个下标,1≤i1<i2<...<im≤n,那么字符串T=Si1Si2...Sim就是S的一个子序列。

现在给出一个字符串S,小明要把这个字符串分割成两个部分,并要求字符串S1是分割后左侧字符串的一个子序列,S2是右侧字符串的一个子序列。在此基础上,他希望左右两侧字符串长度的乘积最大。

输入描述

输入三行,第一行字符串S,第二行字符串S1,第三行字符串S2。输入单个字符串长度不超过100000,所有字符串中只有小写字母。

输出描述

若不存在合法的分割方案,输出-1。否则输出最大乘积。

示例

输   入:abcddecf

acd

ef

返回值:16

没有结果的代码:请各位大佬看看问题出在什么地方

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

vector<string> subString(string str)
{
    vector<string> ve;
    int left = str.size() / 2; //4
    string temp = str.substr(0,left);
    ve.push_back(temp);
    str = str.substr(left, str.size());
    ve.push_back(str);
    return ve;
}

bool isInStr(string input, string str)
{
    //判断str是否在input里面,str不是连续的
    
    int input_len = input.size();
    int str_len = str.size();
    
    if(str_len > input_len) return false;
    
    int it;
    for(int i=0;i<str_len;i++)
    {
        it = input.find(str[i]);
        if(it != -1)
            return true;
    }
    return false;
}

int main()
{
    string input;
    string str1;
    string str2;
    cin >> input;
    cin >> str1;
    cin >> str2;
    vector<string> ve = subString(input);
    string left_str = ve[0];
    string right_str = ve[1];
    
    //判断str1是否在左字符串里
    bool is_left = isInStr(left_str, str1);
    //判断str2是否在右字符串里
    bool is_right= isInStr(right_str, str2);
    if(is_left && is_right)
    {
        cout << left_str.size() * right_str.size() << endl;
    }else{
        cout << -1 << endl;
    }
    
    return 0;
}

5/11组用例通过

运行时间:25 ms

占用内存:5524 kb

用例输入:

neqylaasipupnkhbdxhejkworjeepizyppflccgfbpldcymhaatsiwujrlccxlvazliiiemnxqczlegtljuruvzaoxtntlcdyqdiypvwustglizwbuqapcjmzlfhqvkc

用例输出:

2400179919

你的实际输出:

2500000000
#在线编程##编程##编程算法学习#
在线编程题 文章被收录于专栏

搜集编程题

全部评论

相关推荐

点赞 评论 收藏
分享
03-26 15:18
已编辑
华北水利水电大学 Java
点赞 评论 收藏
分享
评论
3
2
分享

创作者周榜

更多
牛客网
牛客企业服务