赛码网:分割字符串-求解
原题链接
描述
给出一个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#在线编程##编程##编程算法学习#
在线编程题 文章被收录于专栏
搜集编程题

