鱼C论坛

 找回密码
 立即注册
查看: 184|回复: 2

运行超时,优化代码

[复制链接]
发表于 2024-1-28 19:39:16 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. int main()
  4. {
  5.     string s,a,b;
  6.     cin>>s;
  7.     a=s;
  8.     do
  9.     {
  10.         b=s;
  11.         reverse(s.begin(),s.end()); //将s翻一下
  12.         if(s!=a&&b==s)
  13.         {
  14.             cout<<s<<endl;
  15.             return 0;
  16.         }
  17.         
  18.     }while(next_permutation(s.begin(),s.end()));
  19.     cout<<"-1"<<endl;
  20.    
  21. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-1-28 19:40:06 | 显示全部楼层
这段代码是为了判断一个字符串是否为回文数。目前的问题是运行超时,可以尝试优化一下代码。

首先,你可以将翻转字符串的操作放到循环外面,这样可以减少每次循环中的重复计算。

另外,你可以使用双指针来判断是否为回文数,而不是每次都调用`reverse`函数。双指针从字符串的两端开始向中间移动,如果遇到不相等的字符,则不是回文数。

下面是优化后的代码:

  1. #include <iostream>
  2. #include <string>
  3. using namespace std;

  4. bool isPalindrome(string s) {
  5.     int left = 0;
  6.     int right = s.length() - 1;
  7.    
  8.     while (left < right) {
  9.         if (s[left] != s[right]) {
  10.             return false;
  11.         }
  12.         left++;
  13.         right--;
  14.     }
  15.    
  16.     return true;
  17. }

  18. int main() {
  19.     string s;
  20.     cin >> s;
  21.    
  22.     string reversed = s;
  23.     reverse(reversed.begin(), reversed.end()); // 将s翻一下
  24.    
  25.     if (s != reversed && isPalindrome(s)) {
  26.         cout << "是回文数" << endl;
  27.     } else {
  28.         cout << "不是回文数" << endl;
  29.     }
  30.    
  31.     return 0;
  32. }
复制代码


这样,代码应该会更快地运行并避免超时的情况发生。如果还有问题,请随时问我。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-1-28 20:09:11 | 显示全部楼层
这个问题可能是给你一个字符串,是否可以通过字符重组得到一个回文串,这个代码需要枚举每一个字符串的排列,大概会执行 |S|! 次运算。

你可以这样想,偶数次数出现的字符你可以分别放在字符串的两边(放在两边的字符数量相等),奇数次数出现的话,可以通过减去一个字符变成偶数,然后继续这么做,最后剩下的一个放在字符串的最中间。

如果奇数次数出现的字符有两个及其以上,就说明无解。

可以自己写一写,如果写不对再来问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 02:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表