boolall_cannot_change_and_all_same(string& ans, int idx, const string& s){ for (int i = 0; i < m; i++) { if (can_change[i + idx] || ans[i + idx] != s[i]) { returnfalse; } } returntrue; }
// 可以修改的位置对应str2全部是a boolcan_changed_place_are_all_a(string& ans, int idx, const string& s){ for (int i = 0; i < m; i++) { if (can_change[i + idx] && s[i] != 'a') { returnfalse; } elseif (!can_change[i + idx] && ans[i + idx] != s[i]) { returnfalse; } } returntrue; }
voidchange_last2b(string& ans, int idx, const string& s){ bool is_last = true; for (int i = m - 1; i >= 0; i--) { if (can_change[i + idx]) { if (is_last) { ans[i + idx] = 'b'; is_last = false; can_change[i + idx] = false; } else { ans[i + idx] = 'a'; } } } }
voidset_all_a(string& ans, int idx, const string& s){ for (int i = 0; i < m; i++) { if (can_change[i + idx]) { ans[i + idx] = 'a'; } } } public: string generateString(const string& str1, const string& str2){ n = str1.size(); m = str2.size(); string ans(n + m - 1, '-'); can_change = move(vector<bool>(n + m - 1, true));
for (int i = 0; i < str1.size(); i++) { if (str1[i] == 'T') { if (!fillT(ans, i, str2)) { return""; } } }
for (int i = 0; i < str1.size(); i++) { if (str1[i] == 'F') { if (!fillF(ans, i, str2)) { return""; } } }
return ans; } };
#ifdef _DEBUG /* TFTF ab
ababa */ /* FT aghbdfhf
aaghbdfhf */ intmain(){ string a, b; while (cin >> a >> b) { Solution sol; cout << sol.generateString(a, b) << endl; } return0; } #endif