zoukankan      html  css  js  c++  java
  • 算法题之添加回文串

    题目描述
    对于一个字符串,我们想通过添加字符的方式使得新的字符串整体变成回文串,但是只能在原串的结尾添加字符,请返回在结尾添加的最短字符串。
    给定原字符串A及它的长度n,请返回添加的字符串。保证原串不是回文串。

    测试样例:
    "ab",2

    返回:"a"

    分析:

    这是一个讨巧的办法,
    问题分解
    1、找到最长的回文子串
    2、剩余部分就是需要添加的子串

    使用Naive查找,寻找最大公共串
    这里用到了:翻转子串==原子串 =>回文子串
    从原串的开头开始找,比较是否与翻转串的末尾相同
    【这里用到了本题的特征:已有的回文子串肯定出现在末尾,不会出现在中间】
    Example:
    原串 abcdedc
    翻转串 cdedcba

        string addToPalindrome(string A, int n) {
            // write code here
    		string s = A;
            reverse(s.begin(),s.end()); // 取得翻转串
            for(int i=0;i<n;i++) // Naive查找
                 if(A.substr(i,n-i)==s.substr(0,n-i))//求最长公共子串
                    return s.substr(n-i,i);//返回公共集后面剩余字符串
            return string("");
        }
    

      

  • 相关阅读:
    5月26号
    5.17 Quartz笔记
    5.23Java各种对象(PO,BO,VO,DTO,POJO,DAO,Entity,JavaBean,JavaBeans)的区分
    5.23@Comfiguration的解释
    5月20号
    5.20
    java与C++不同之处(java不支持特性)
    递归算法之回溯
    0119
    linux打包及备份指令
  • 原文地址:https://www.cnblogs.com/shixiangwan/p/6739925.html
Copyright © 2011-2022 走看看