题解:
从后往前找,每个字母第一次出现就记录下来,这样找出来的就是T;接下来因为第一次删掉的字母只会出现1次,第二次删掉的只会出现2次,以此类推;找出原本字符串s的长度,最后带回去验证;
代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int n;
cin >> n;
while (n--)
{
string s;
cin >> s;
string t;
int num[30] = { 0 };
for (int i = s.size() - 1; i >= 0; i--)
{
if (num[s[i] - 'a'] == 0)
{
num[s[i] - 'a']++;
t = s[i] + t;
}
else
{
num[s[i] - 'a']++;
}
}
//cout << t << endl;
for (int i = 0; i < t.size(); i++)
{
num[t[i] - 'a'] /= (i + 1);
}
string ans;
for (int i = 0; i < s.size(); i++)
{
num[s[i] - 'a']--;
if (num[s[i] - 'a'] < 0)
{
break;
}
else
{
ans += s[i];
}
}
string x;
int cnt = 0;
string ans1 = ans;
while (ans1!=""&&cnt<t.size())
{
x += ans1;
string l = "";
for (int i = 0; i < ans1.size(); i++)
{
if (ans1[i] == t[cnt])
{
continue;
}
else
l += ans1[i];
}
cnt++;
ans1 = l;
/* cout << ans1 << endl;*/
}
if (x == s)cout << ans << " " << t << endl;
else
cout << -1 << endl;
}
}