【发布时间】:2019-02-04 11:49:27
【问题描述】:
我正在尝试为竞赛实现一个代码,该代码可以查找所有输入字符串中的常见字符数。
我跳过了输入格式,但时间限制为 0.5 秒,因此我尝试编写最佳代码。 我遵循的方法是,在输入时,我用最小长度标记字符串以便稍后遍历。然后我遍历该字符串以提取每个字符并检查它是否在所有字符串中。一旦我检查了一个字符,我就会从所有字符串中删除它以节省时间。
#include<iostream>
#include<bits/stdc++.h>
#include<string>
using namespace std;
string s[205];
int t,len=0,n,k,count1,count2;
char a;
int main()
{
cin>>t;
while(t--)
{
cin>>n;
len=0;
count1=0;
count2=0;
k=0;
for(int i=0;i<n;++i)
{
cin>>s[i];
if(i==0)
{
len = s[i].length();
}
else
{
if(s[i].length()<len)
{
len = s[i].length(); //Finding string with min length
k = i;
}
}
}
for(int i=0;i<s[k].length();++i)
{
count1 = 0;
a = s[k][i];
for(int j=0;j<n;++j)
{
auto found = s[j].find(a);
if(found==std::string::npos) //checking each character in all strings
break;
else
count1++;
}
if(count1==n) //If char is in all strings
{
count2++;
}
for(int j=0;j<n;++j)
{
if(s[j].find(a)!=std::string::npos)
{
s[j].erase(std::remove(s[j].begin(), s[j].end(), a), s[j].end()); //removing checked character from all strings
}
}
}
cout<<count2<<"\n"; //number of common characters
}
return 0;
}
代码运行了几个测试用例,但大多数都失败了。如果代码中存在逻辑缺陷,请告诉我。
【问题讨论】:
-
任务的要求有些不清楚:例如字符串中是否有重复字符?另外,由于您使用 c++ 进行标记并且标题中有 c++14,您是否允许使用 std::set?最后,从字符串中删除字符似乎比它的价值要多得多。
-
您是否有失败的测试用例的输入数据,您是否尝试使用调试器对其进行调试?
-
@Pzc,是的,字符串中有重复项,不,对可以使用的库没有限制。
-
@ThomasSablik,不幸的是,没有。我确实尝试使用 GDB 对其进行调试,但代码对于我能想到的所有测试用例都运行良好。
-
然后尝试输入 1 2 abc abc。你的代码的输出是 2 但它应该是 3
标签: c++ string indexing stl character