博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在一个字符串里面怎么找出最长回文子序列长度
阅读量:6458 次
发布时间:2019-06-23

本文共 1833 字,大约阅读时间需要 6 分钟。

  hot3.png

回文字符串是什么?类似于level,noon,abbba这种,就是从左读和从右读都是同一个字符串。。。。

先说一下我的思路:

比如现在有字符串:”12212321“

1,先在每个字符间隔的地方放一个“#”,这样做的目的是为了不用对字符串进行奇偶的分类讨论,这个字符串变成“#1#2#2#1#2#3#2#1#”;

2,把“#1#2#2#1#2#3#2#1#”变成一个字符数组;

3,开始遍历这个字符数组:

        (1)i 表示当前字符的下标,定义两个变量,toLeft表示从当前下标开始向左移动的下标,toRight表示从当前下表开始向右移动的下标;

        (2)定义一个boolean变量 find,表示在toLeft和toRight移动过程中是否已经找到最长的回文子字符串,定义一个radio的int变量表示回文子字符串的半径;

        (3)定义一个和字符串一样长度的int数组radios存放已每个字符为中心的回文子序列的最大半径;

        (4)toLeft向左移动的同时toRight向右移动,判断toLeft对应字符和toRight对应字符是否相等,如果相等半径就加1,不相等表示已经找到最长回文子字符串,把radio 放进radios数组;

        (5)如果找到回文子字符串,find = true;

        (6)toLeft和toRight在移动中要保证不能越界;

4,具体代码

package com.lin.test;public class Huiwen {        public static void main(String[] args) {        System.out.println("12212321--------------------"+new Huiwen().maxHuiwen("12212321"));    }        private int maxHuiwen(String str){                char[] chars = str.toCharArray();        StringBuilder stringBuilder = new StringBuilder();        stringBuilder.append('#');        for(int i=0;i
 temp.length - 1){//如果越界,跳出                    break;                }                if(temp[toLeft] == temp[toRight]){                    radio ++;//半径+1                }                else {                    find = true;                }            }            radios[i] = radio;        }                /**         * 找出radios中最大值就是最长子序列长度         */                for (int i = 0; i < temp.length; i++) {            System.out.print(temp[i]+"\t");        }        System.out.println();                int max = -1;        for(int i=0;i
 max){                max = radios[i];            }        }        System.out.println();        return max;    }}

5,运行结果

#    a    #    c    #    b    #    c    #    a    #    a    #    c    #    b    #    c    #    d    #    

1    2    1    2    1    6    1    2    1    2    9    2    1    2    1    4    1    2    1    2    1   

可以看到最长的半径是9,那么该字符串的最长回文子序列长度就是9-1=8;

转载于:https://my.oschina.net/ChiLin/blog/668864

你可能感兴趣的文章
关于最小生成树中的kruskal算法中判断两个点是否在同一个连通分量的方法总结...
查看>>
开篇,博客的申请理由
查看>>
Servlet 技术全总结 (已完成,不定期增加内容)
查看>>
[JSOI2008]星球大战starwar BZOJ1015
查看>>
CountDownLatch与thread-join()的区别
查看>>
centos 7 部署LDAP服务
查看>>
揭秘马云帝国内幕:马云的野心有多大
查看>>
iOS项目分层
查看>>
一个action读取另一个action里的session
查看>>
IntelliJ IDEA 注册码
查看>>
linux 上面配置apache2的虚拟目录
查看>>
String字符串的截取
查看>>
DynamoDB Local for Desktop Development
查看>>
laravel 使用QQ邮箱发送邮件
查看>>
用javascript验证哥德巴赫猜想
查看>>
Shell编程-环境变量配置文件
查看>>
[Unity3d]DrawCall优化手记
查看>>
Struts2和Spring MVC的区别
查看>>
理解Javascript参数中的arguments对象
查看>>
p2:千行代码入门python
查看>>