法一(reverse函数):
1.思路:比对反转后的与原来的是否相同
2.代码:
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s,t;
cin>>s;
t=s;
reverse(s.begin(),s.end());
cout<<(s==t?"Yes":"No");
return 0;
}
法二(数组):
1.思路:从头到尾,对称位置一一比较
2.代码:
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
cin >> s;
for (int i=0, j=s.length() - 1;i<s.length()/2;i++,j--) {
if (s[i] != s[j]) {
cout << "No"; //有一个不符合,后面直接不用看,直接结束,即return 0;
return 0;
}
}
cout << "Yes";
return 0;
}
法三(数组):
1.思路:和法二很像,但是让我想起了二分
2.代码:
#include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin >> s;
int l=0,r=s.size()-1;
while(l<r){
if(s[l]==s[r]){
++l;
--r;
}
else
break;
}
if(l>=r)
cout << "Yes";
else
cout << "No";
return 0;
}
但是遇到输入的字符串是由空格的就不行了,用上面的代码不能给出正确答案;
所以用可以输入带空格的输入方法就可以了(maybe)
带空格的回文判定:
#include <bits/stdc++.h>
using namespace std;
int main() {
string s;
getline(cin,s); //就是这个地方
for (int i=0, j=s.length() - 1;i<s.length()/2;i++,j--) {
if (s[i] != s[j]) {
cout << "No"; //有一个不符合,后面直接不用看,直接结束,即return 0;
return 0;
}
}
cout << "Yes";
return 0;
}
浅浅的修改
#include <bits/stdc++.h>
using namespace std;
int main()
{
string s,t;
getline(cin,s);
t=s;
reverse(s.begin(),s.end());
cout<<(s==t?"Yes":"No");
return 0;
}