_safdsfdeaf_ @ 2024-11-30 19:07:31
#include<bits/stdc++.h>
#include<stack>
using namespace std;
int n;
string s,s1,s2="";
stack<char>a;
int i,k,l;
bool flag1,flag2;
bool p(string s){
for(i=0;i<s.size();i++)
a.push(s[i]);
for(i=0;i<(a.size()/2);i++){
if(a.top()==s[i]) a.pop();
else return false;
}
return true;
}
int main(){
cin>>n;
for(i=0;i<n;i++){
s1=s2="";
flag1=false;
flag2=false;
cin>>s;
s1+=s[0];
for(k=1;k<s.length()-2;k++){
s1+=s[k];
flag1=p(s1);
for(l=k+1;l<s.length();l++)
s2+=s[l];
flag2=p(s2);
if(p(s1)&&p(s2)){
cout<<"Yes"<<endl;
break;
}
}
if(!(p(s1)&&p(s2))) cout<<"No"<<endl;
}
return 0;
}
by sinfg @ 2024-11-30 19:20:04
你这个cout可以优化一下,加一个 ios::snyc_with_stdio(false); 关一下同步流 我还给你改了些东西 完整代码
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
// 检查字符串是否为回文
bool isPalindrome(const string& str) {
int left = 0;
int right = str.size() - 1;
while (left < right) {
if (str[left] != str[right]) {
return false;
}
left++;
right--;
}
return true;
}
int main() {
int n;
cin >> n;
for (int i = 0; i < n; i++) {
string s;
cin >> s;
bool found = false;
// 尝试分割字符串并检查两部分是否都是回文
for (int j = 1; j < s.size(); j++) {
string s1 = s.substr(0, j);
string s2 = s.substr(j);
if (isPalindrome(s1) && isPalindrome(s2)) {
cout << "Yes" << endl;
found = true;
break;
}
}
// 如果没有找到任何分割方式使得两部分都是回文
if (!found) {
cout << "No" << endl;
}
}
return 0;
}
by kapibala__ @ 2024-12-06 21:23:30
@sinfg 你没有判断长度哦 样例第三个过不了