我正在尝试解决一个需要两个字符串并且有很多测试用例的问题。考虑到许多测试用例,我已经编写了解决问题的代码。当我只使用一个测试用例时,代码可以正常运行,但是当我输入多个测试用例时,它给出错误的答案
该代码适用于有关hackerearth的问题,如下所示 给定两个字符串a和b(长度可以相同或可以不相同),确定进行a和b字谜所需的最小字符删除数。可以从任何一个字符串中删除任何字符。
输入:
测试用例,t 对于每个测试用例,两个字符串a和b 输出:
所需的O / p
约束:
字符串长度<= 10000
注意:
通过重新排列单词的字母来形成单词的字谜。
例如->对于“ RAM”一词-MAR,ARM,AMR,RMA等是少量的字谜。
这是我在c ++中的代码:
#include<bits/stdc++.h>
using namespace std;
int main()
{
//cin.tie(NULL);
//ios_base::sync_with_stdio(false);
int t;
//cout<<"Enter no of testcases : ";
cin>>t;
//cout<<endl;
for(int k=0;k<t;k++)
{
string s1;
string s2;
cin.ignore();
//cout<<"Enter first string : ";
getline(cin,s1);
//cout<<"Enter second string : ";
getline(cin,s2);
int c1[26],c2[26];
for(int itr='a';itr<'z';itr++)
{
c1[itr]=0;
c2[itr]=0;
}
for(int itr=0;itr<s1.length();itr++)
c1[s1[itr]]++;
for(int itr=0;itr<s2.length();itr++)
c2[s2[itr]]++;
int max=(s1.length()>s2.length()?s1.length():s2.length());
//cout<<endl<<max;
int analen=0;
for(int itr='a';itr<'z';itr++)
{
analen+=((c1[itr]<c2[itr])?c1[itr]:c2[itr]);
}
//cout<<"length of anagram is: "<<analen<<endl;
int del=(s1.length()+s2.length())-2*analen;
cout<</*"Number of characters required to delete to get an anagram is : "<<*/del;
}
return 0;
}
输入: 1个 abc cde
输出: 4
对于上述输入,代码可以完美运行 但 输入: 2 abc cde pqr 第一个
输出: 4 3
正确的输出: 4 4