#include<iostream>
#include<cstring>
using namespace std;
int cnt[26];
char str[100010];
int main()
{
cin>>str;
for(int i=0;i<strlen(str);++i) cnt[str[i]-'a']++;
for(int i=0;i<strlen(str);++i)
if(cnt[str[i]-'a']==1)
{
cout<<str[i]<<endl;
return 0;
}
cout<<"no";
return 0;
}
不在每次for循环里边都运行一次strlen()函数,只运行一次:
#include<iostream>
#include<cstring>
using namespace std;
int cnt[26];
int main()
{
string str;
cin>>str;
int len=strlen(str);
for(int i=0;i<len;++i) cnt[str[i]-'a']++;
for(int i=0;i<len;++i)
if(cnt[str[i]-'a']==1)
{
cout<<str[i]<<endl;
return 0;
}
cout<<"no";
return 0;
}
因为字符串最后一个字符为0,所以也可以不用求长度:
#include<iostream>
#include<cstring>
using namespace std;
int cnt[26];
int main()
{
string str;
cin>>str;
for(int i=0;str[i];++i) cnt[str[i]-'a']++;
for(int i=0;str[i];++i)
if(cnt[str[i]-'a']==1)
{
cout<<str[i]<<endl;
return 0;
}
cout<<"no";
return 0;
}
下面来看一下三种思路的运行时间:
可以看到在for()循环中用s[i]是最快的.
勘错:第一和第三代码有错!
菜鸡理解:对于不用strlen或者size的len,对于时间影响不大,因为你先计算冷,后面去循环判断时间基本一致(linux的real time可能是一样的 QAQ,(加入cin.tie(0) ,用len=size可以优化到21ms)
收到,已更正,感谢orz