/*
题目:输入一个字符串,输出该字符串中对称的子字符串的最大长度。
比如输入字符串 “ google ” ,由于该字符串里最长的对称子字符串是 “ goog ” ,因此输出 4 。
*/
//当然可以遍历字符串,在每个字符处,向左右两方查找字符,看其是否相等
//下面递归地做一下
#include<iostream>
#include <string>
using namespace std;
int max_length;
void DFS( string str , int low , int high , int length ){
if( high > low ) {
//( length > max_length )是剪枝操作
if( ( str[ low ] == str[ high ] ) && ( length > max_length ) ) {
DFS( str , low + 1 , high - 1 , length );
}
if( high - low > max_length ) {//剪枝
DFS( str , low + 1 , high , high - low );
DFS( str , low , high - 1 , high - low );
}
}
//这时候意味着出现一个对称串
else {
if( max_length < length ) {
max_length = length;
}
}
}
int main() {
max_length = 0;
string str;
cin >> str;
DFS( str , 0 , str.length() - 1 , str.length( ) );
cout << max_length << endl;
}
找字符串里最长的对称子串
最新推荐文章于 2021-08-18 17:34:36 发布