zoukankan      html  css  js  c++  java
  • 最长回文字符串

    在一个字符串中,找出最长的回文字符串


    // MaxSameReverse.cpp : 定义控制台应用程序的入口点。
    //
    
    #include "stdafx.h"
    #include<deque>
    #include<iostream>
    using namespace std;
    
    
    bool IsReverseTheSame(deque<char>in);
    deque<char> substring(deque<char> input,int beg,int end);
    bool MaxSameReverse(deque<char>input);
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    	deque<char>cc;
    	cc.push_back('g');
    	cc.push_back('a');
    	cc.push_back('b');
    	cc.push_back('c');
    	cc.push_back('b');
    	cc.push_back('a');
    	if (IsReverseTheSame(cc))//测试IsReverseTheSame函数
    		cout << 1 << endl;
    	else
    		cout << 0 << endl;
    	cc.push_back('c');
    	cout << cc[2] << endl;
    
    	MaxSameReverse(cc);
    	
    	system("pause");
    	return 0;
    }
    
    bool IsReverseTheSame(deque<char>in)
    {
    	while (in.size() > 2)
    	{
    		if (in.front() != in.back())
    		{
    			return false;
    		}
    		in.pop_back();
    		in.pop_front();
    		IsReverseTheSame(in);
    	}
    	if (in.size() == 2)
    	{
    		if (in[0] == in[1])
    			return true;
    		return false;
    	}
    	if (in.size() == 1)
    		return true;
    }
    
    deque<char> substring(deque<char> input, int beg, int end)
    {
    	deque<char>out;
    	for (int i = beg; i < end + 1; i++)
    		out.push_back(input[i]);
    	return out;
    }
    
    
    bool MaxSameReverse(deque<char>input)
    {
    	bool flag = false;
    	for (int i = input.size(); i >0; i--)
    	{
    		for (int k = 0; k < input.size() - i+1; k++)
    		{
    			deque<char>ww(substring(input, k, i+k - 1));
    			
    			if (IsReverseTheSame(ww))
    			{
    				flag = true;
    				for (int m = 0; m < ww.size(); m++)
    					cout << ww[m];
    				cout << endl;
    			}
    			if (flag)
    				break;
    		}
    		if (flag)
    			break;
    	}
    	return flag;
    }
    
    //开始用char*做递归,陷入死循环,后来改用deque
    
    /*
    bool IsReverseTheSame(char* in)
    {
    	while (strlen(in)> 2)
    	{
    		if (in[0] != in[strlen(in) - 1])
    		{
    			return false;
    		}
    		char*out = new char[strlen(in) - 2];
    		out = substring(in);
    		
    		cout << out << endl;
    		int pp = strlen(out);
    		cout << pp<<endl;
    		IsReverseTheSame(out);
    		
    	}
    	if (strlen(in) == 2)
    	{
    		if (in[0] == in[1])
    			return true;
    		return false;
    	}
    	if (strlen(in) == 1)
    		return true;
    
    }
    
    */
    



    版权声明:

  • 相关阅读:
    Ueeidor 使用
    springMvc 拦截器
    redis 设置密码
    freemarker 定义公共header
    freemarker macro 使用
    freemarker ! 用法
    Android 远程连接数据库。。。。。
    Android Studio 配置
    Jquery中$.get(),$.post(),$.ajax(),$.getJSON()的用法总结
    表单,table的css
  • 原文地址:https://www.cnblogs.com/walccott/p/4956924.html
Copyright © 2011-2022 走看看