1, 回文序列判断
#include<iostream>
#include<bits/stdc++.h>
using namespace std;
string reverse(string str)
{
int n = str.length();
for(int i=0;i<n/2;i++)
{
swap(str[i],str[n-i-1]);
}
return str;
}
bool isPalindrome(string a)
{
return reverse(a)==a;
}
int main()
{
string s;
cin>>s;
if(isPalindrome(s))cout<<"YES";
else cout<<"NO";
return 0;
}
2,
给定一个字符串,输出所有长度至少为2的回文子串。 回文子串即从左往右输出和从右往左输出结果是一样的字符串,比如:abba,cccdeedccc都是回文字符串。
输入:(一个字符串,由字母或数字组成。长度1000以内。)
输出:所有的回文子串,每个子串一行。子串长度小的优先输出,若长度相等,则出现位置靠左的优先输出。
输入:
123321125775165561
输出:
33
11
77
55
2332
2112
5775
6556
123321
165561
#include<iostream>
using namespace std;
string reverse(string str)//将字符串反转
{
int n = str.length();
for(int i=0;i<n/2;i++)
{
swap(str[i],str[n-i-1]);
}
return str;
}
bool isPalindrome(string a)//判断字符串是否相等
{
return reverse(a)==a;
}
int main()
{
string s;
cin>>s;
for(int k=2;k<=s.size();k++)
for(int i=0;i<s.size()-k+1;i++)
if(isPalindrome(s.substr(i,k)))
cout<<s.substr(i,k)<<'\n';
return 0;
}
对里面的substr(i,k)说明;