最早的代码超时了 样例测试的时候 其实就超时了 只是当时没注意而已 心存侥幸
#include <iostream> #include <string> #include <algorithm> using namespace std ; int main() { string s ; cin >> s ; int len = s.size(); bool flag = false ; do { for ( int i = 0 ; i < len/2 ;++i) if (s[i]==s[len-1-i]) flag = true ; }while(next_permutation(s.begin(),s.end())); if(flag ) cout << "YES" << endl ; else cout << "NO" << endl ; return 0 ;//超时代码 }
未超时代码 其实是找到了回文字符串的规律 就是说 奇数个字母 最多只有一种。 但是 运行了好久也不对 找了半天错误 是 循环多减了一个1 。
#include <iostream> #include <string> using namespace std ; void solve ( string a ) { int A[26] ; for ( int i = 0 ; i < 26 ;++i) A[i] = 0 ; int len = a.size(); int count = 0 ; for (int i = 0 ; i < len ; ++i) A[a[i]-'a']++; for (int i = 0 ; i < 26 ; ++i) if (A[i]%2 != 0) count++; if ( count <=1) cout << "YES" << endl ; else cout << "NO" << endl ; } int main() { string s ; cin >> s ; solve(s) ; return 0 ; }