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