无法通过100个测试案例中的2个

时间:2019-06-13 09:20:48

标签: c++ string

问题指出:如果两个字符串相同或可以通过执行任意数量的步骤使它们相等,则包含小写英文字母的两个字符串 A B 是兼容的时间:

从字符串 A 中选择一个前缀(可能为空),并将该前缀中所有字符的字母值增加相同的有效量。例如,如果字符串为 xyz ,并且选择前缀 xy ,则可以通过将字母值增加1来将其转换为 yz 。但是,如果选择前缀 xyz ,则不能增加字母值。 您的任务是确定给定的字符串 A B 是否兼容。

这里的逻辑是,两个字符串的较低索引的差异永远不会增加较高索引的差异。那就是我所做的。这两个测试用例确实很长,但不超过我们可以存储在字符串类型中的内容。这就是为什么我在这里没有提供它的原因。

#include<bits/stdc++.h>
using namespace std;

int main(){

ios_base::sync_with_stdio(false);
cin.tie(0);

string s1;
string s2;
cin>>s1>>s2;
long long int count=0,max=0;
if(s2.length()!=s1.length())
{
 cout<<"NO";
 return 0;
}
for(int i=0;s1[i]!='\0';i++)
{
 if(s1[i]==s2[i])
     break;
 else
     count++;
}
for(int i=count-1;i>=0;i--)
{
   if(s2[i]-s1[i]>=max && s2[i]-s1[i]>0 && s2[i]-s1[i]<26)
     max= s2[i]-s1[i];

   else
   {
      cout<<"NO";
      return 0;
   }
 }
 cout<<"YES";

 return 0;
}
//The tester correct code is as follows:

#include<bits/stdc++.h>
using namespace std;
int main()
{
 string a,b;
 assert(cin>>a>>b);
 assert(a.size()>=1 && a.size()<=1e6);
 assert(b.size()>=1 && b.size()<=1e6);
 bool f=1;
 if(a.size()!=b.size())f=0;
 else
 {
    int val=30;
    for(int i=0;i<a.size();i++)
    {
        assert(a[i]>='a' && a[i]<='z');
        assert(b[i]>='a' && b[i]<='z');
        int temp=b[i]-a[i];
        if(temp>val || temp<0){f=0;break;}
        val=temp;
    }
 }
 if(f)cout<<"YES\n";
 else cout<<"NO\n";
 return 0;
}

0 个答案:

没有答案