马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include <bits/stdc++.h>
using namespace std;
int n;
const int N=101;
string a[N];
int main()
{
cin>>n;
string s;
for(int i=0;i<n;i++)
{
cin>>a[i];
}
for(int i=0;i<n;i++)
{
int pos=-1;
int cnt=0,ans=0;
string c="ab";
string d="ba";
while((pos=a[i].find(c,pos+1))!=-1)
{
cnt++; //
}
while ((pos=a[i].find(d,pos+1))!=-1)
{
ans++;
}
if(a[i].size()==1)cout<<a[i]<<endl;
else
{
if(cnt!=ans)
{
a[i][0]='b';
cout<<a[i]<<endl;
}
else cout<<a[i]<<endl;
}
}
}
这段代码中出现超时的问题主要是在字符串查找部分的逻辑,导致时间复杂度较高。为了提高效率,可以对字符串查找部分进行优化,同时简化冗余的逻辑。
以下是对代码的修改建议: #include <iostream>#include <string>using namespace std;int main() { int n; const int N = 101; string a[N]; cin >> n; for (int i = 0; i < n; i++) { cin >> a[i]; } for (int i = 0; i < n; i++) { int cnt_ab = 0, cnt_ba = 0; for (int j = 0; j < a[i].size() - 1; j++) { if (a[i][j] == 'a' && a[i][j + 1] == 'b') { cnt_ab++; } if (a[i][j] == 'b' && a[i][j + 1] == 'a') { cnt_ba++; } } if (a[i].size() == 1) { cout << a[i] << endl; } else { if (cnt_ab != cnt_ba) { a[i][0] = 'b'; } cout << a[i] << endl; } } return 0;}
这样修改后的代码应该能够避免超时问题,并且更加高效地统计子串出现的次数。
|