2 条回复
inputs_1 = raw_input() inputs_2 = raw_input() inputs_3 = raw_input() inputs_1_list = list(inputs_1) res_all=[] for x in range(len(inputs_1)): res_left = inputs_1[0:x] res_right = inputs_1[x:len(inputs_1)] res_list = [] if set(list(inputs_2)) < set(list(res_left)) or set(list(inputs_3)) < set(list(res_right)): length_1 = len(res_left) length_2 = len(res_right) res_2 = length_1 * length_2 res_list.append(res_2) res_all.append(res_list) if len(res_all) > 0: for i in max(res_all): print int(i) else: print "-1"
#include <iostream> #include <string> #include <vector> using namespace std; int _tmain(int argc, _TCHAR* argv[]) { string S; cin >> S; string s1; cin >> s1; string s2; cin >> s2; vector<int> s1_S_max_index; for (int i = 0; i < S.length(); i++) { if (S[i] == s1[s1.length() - 1]) { s1_S_max_index.push_back(i); } } int count1 = 0; int s1_S_max = 0; int s1_temp_m = 0; for (int i = 0; i < s1_S_max_index.size(); i++) { for (int n = 0; n < s1.length(); n++) { for (int m = s1_temp_m; m <= s1_S_max_index[i]; m++) { if (S[m] == s1[n]) { count1++; s1_temp_m = m + 1; if (count1 == s1.length()) { s1_S_max = m; } break; } } } } int s2_S_min = 0; int count2 = 0; int s2_temp_m = S.length() - 1; if (S.length() - s1_S_max >= s2.length() && s1_S_max >= s1.length() - 1) { for (int n = s2.length() - 1; n >= 0; n--) { for (int m = s2_temp_m; m >= s1_S_max; m--) { if (S[m] == s2[n]) { count2++; s2_temp_m = m - 1; if (count2 == s2.length()) { s2_S_min = m; } break; } } } } if (s1_S_max >= s2_S_min) { cout << -1 << endl; } else{ if (s1_S_max >= (S.length()-1)/ 2) s2_S_min = s1_S_max + 1; if (s2_S_min <= (S.length() - 1) / 2) s1_S_max = s2_S_min - 1; if (s1_S_max<(S.length() - 1) / 2 && s2_S_min >(S.length() - 1) / 2) { s1_S_max = (S.length() - 1) / 2; s2_S_min = s1_S_max + 1; } cout << (s1_S_max+1)*(S.length() - s2_S_min) << endl; } return 0; }
添加回复