这个问题的题意看好半天才看懂,相当于求两个字符串的“公共子串”,但是要求子串的值的和小于等于3
代码如下:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int solve(const string&s1, const string& s2);
int main()
{
#ifndef ONLINE_JUDGE
ifstream fin("d:\\uva_in.txt");
streambuf *back = cin.rdbuf(fin.rdbuf());
#endif
string s1, s2;
while (cin >> s1 >> s2)
{
int ans = solve(s1, s2);
cout << ans << endl;
}
#ifndef ONLINE_JUDGE
cin.rdbuf(back);
#endif
return 0;
}
int solve(const string&s1, const string& s2)
{
int len1 = s1.length();
int len2 = s2.length();
int start = 0;
int i = 0, j = 0;
while (i < len1 && j < len2)
{
if (s1[i] + s2[j] <= '1' + '2')
{
i++, j++;
}
else
{
start++;
i = start;
j = 0;
}
}
int ans1 = len1 + len2 - j;
start = 0;
i = j = 0;
while (i < len1 && j < len2)
{
if (s1[i] + s2[j] <= '1' + '2')
{
i++, j++;
}
else
{
start++;
i = 0;
j = start;
}
}
int ans2 = len1 + len2 - i;
return (ans1 < ans2 ? ans1 : ans2);
}