褪色的回文,为什么我得到错误的判决?
Faded Palindromes,why i'm getting wrong verdict?
字符串中的褪色字符用“.”表示。其中其他字符是小写拉丁字母,即 ['a'-'z']。可以包含一个或多个褪色字符串。我想通过用小写拉丁语填充每个褪色字符 ('.') 来构造字典序最小的回文 alphabet.I 我又尝试了 3 个小时,但我得到了错误的结论。我无法解决我的问题。谁能帮帮我?
#include<bits/stdc++.h>
using namespace std;
int main()
{
//freopen("a.in", "r", stdin);
//freopen("a.out", "w", stdout);
int test;
string s;
cin>>test;
while(test--)
{
cin>>s;
for(int i=0; i<s.size()/2; i++)
{
if(s[i]=='.')
{
if(s[i]==s[s.size()-1-i])
{
s[i]='a';
s[s.size()-1-i]='a';
}
}
}
if(s.size()%2) s[s.size()/2]='a';
//cout<<"s = "<<s<<endl;
for(int i=0; i<s.size()/2; i++)//left string checking
{
if(s[i]=='.')
{
s[i]=s[s.size()-1-i];
}
}
for(int i=s.size()-1,k=0; i>s.size()/2; i--,k++)//Right string checking
{
if(s[i]=='.')
{
s[i]=s[k];
}
}
//cout<<" ss = "<<s<<endl;
bool flag=true;
for(int i=0; i<s.size()/2; i++)
{
if(s[i]!=s[s.size()-1-i])
{
flag=false;
}
}
if(flag==false) cout<<"-1"<<endl;
else cout<<s<<endl;
}
}
Correction Line ::66 你把中间字符总是'a'。当中间位置是褪色字符时,我们应该把字符'a'。可能对你有帮助。
字符串中的褪色字符用“.”表示。其中其他字符是小写拉丁字母,即 ['a'-'z']。可以包含一个或多个褪色字符串。我想通过用小写拉丁语填充每个褪色字符 ('.') 来构造字典序最小的回文 alphabet.I 我又尝试了 3 个小时,但我得到了错误的结论。我无法解决我的问题。谁能帮帮我?
#include<bits/stdc++.h>
using namespace std;
int main()
{
//freopen("a.in", "r", stdin);
//freopen("a.out", "w", stdout);
int test;
string s;
cin>>test;
while(test--)
{
cin>>s;
for(int i=0; i<s.size()/2; i++)
{
if(s[i]=='.')
{
if(s[i]==s[s.size()-1-i])
{
s[i]='a';
s[s.size()-1-i]='a';
}
}
}
if(s.size()%2) s[s.size()/2]='a';
//cout<<"s = "<<s<<endl;
for(int i=0; i<s.size()/2; i++)//left string checking
{
if(s[i]=='.')
{
s[i]=s[s.size()-1-i];
}
}
for(int i=s.size()-1,k=0; i>s.size()/2; i--,k++)//Right string checking
{
if(s[i]=='.')
{
s[i]=s[k];
}
}
//cout<<" ss = "<<s<<endl;
bool flag=true;
for(int i=0; i<s.size()/2; i++)
{
if(s[i]!=s[s.size()-1-i])
{
flag=false;
}
}
if(flag==false) cout<<"-1"<<endl;
else cout<<s<<endl;
}
}
Correction Line ::66 你把中间字符总是'a'。当中间位置是褪色字符时,我们应该把字符'a'。可能对你有帮助。