回文字符串是什么?类似于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

stringBuilder.append(chars[i]);

stringBuilder.append('#');

}

char[] temp = stringBuilder.toString().toCharArray();

int[] radios = new int[temp.length];//存放当前字符为中心的构成回文字符串的最大半径

for(int i=0;i

boolean find = false;//在当前字符中,是否已经找到以当前字符为中心的回文字符串

int toLeft = i;

int toRight = i;

int radio = 1;//半径

while(!find){

toLeft --;//左移

toRight++;//右移

if(toLeft  temp.length - 1){//如果越界,跳出

break;

}

if(temp[toLeft] == temp[toRight]){

radio ++;//半径+1

}

else {

find = true;

}

}

radios[i] = radio;

}

/**

* 找出radios中最大值就是最长子序列长度

*/

for (int i = 0; i

System.out.print(temp[i]+"\t");

}

System.out.println();

int max = -1;

for(int i=0;i

System.out.print(radios[i]+"\t");

if(radios[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;

java最长回文子序列_在一个字符串里面怎么找出最长回文子序列长度相关推荐

  1. 找出最具竞争力的子序列_力扣300——最长上升子序列

    这道题主要涉及动态规划,优化时可以考虑贪心算法和二分查找. 原题 给定一个无序的整数数组,找到其中最长上升子序列的长度. 示例: 输入: [10,9,2,5,3,7,101,18]输出: 4 解释: ...

  2. java小编程----给定一个只包含 '(' 和 ')' 的字符串,找出最长的包含有效括号的子串的长度。

    package com.henu;import java.util.Arrays;/*** @author limengdong* @date 2019年7月19日* @classroom 208bi ...

  3. 找出最具竞争力的子序列_每日算法系列【LeetCode 376】摆动序列

    题目描述 如果连续数字之间的差严格地在正数和负数之间交替,则数字序列称为摆动序列.第一个差(如果存在的话)可能是正数或负数.少于两个元素的序列也是摆动序列. 例如, [1,7,4,9,2,5] 是一个 ...

  4. java中double身高_用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现...

    用JAVA编一个程序 输入10名同学的身高,找出最高升高,要求使用对象数组类型的带参方法来实现 关注:285  答案:5  mip版 解决时间 2021-02-05 07:44 提问者女人不需要倾国倾 ...

  5. LeetCode 5485. 找出最长的超赞子字符串 (状态压缩、二进制、位运算、前缀和)

    5485. 找出最长的超赞子字符串 题意: 给你一个字符串 s .请返回 s 中最长的 超赞子字符串 的长度. 「超赞子字符串」需满足满足下述两个条件: 该字符串是 s 的一个非空子字符串 进行任意次 ...

  6. 1542. 找出最长的超赞子字符串 哈希+状态压缩

    1542. 找出最长的超赞子字符串 给你一个字符串 s .请返回 s 中最长的 超赞子字符串 的长度. 「超赞子字符串」需满足满足下述两个条件: 该字符串是 s 的一个非空子字符串 进行任意次数的字符 ...

  7. leetcode 5485. 找出最长的超赞子字符串

    5485. 找出最长的超赞子字符串 给你一个字符串 s .请返回 s 中最长的 超赞子字符串 的长度. 「超赞子字符串」需满足满足下述两个条件: 该字符串是 s 的一个非空子字符串 进行任意次数的字符 ...

  8. 现代密码学—密码学基本编码实践 16进制向base64编码转换 等长16进制字符串异或 找出密钥并破解密文 python

    实验地点:E楼III区503 实验时间:11.17 一.实验室名称:攻防实验室 二.实验项目名称:密码学基本编码实践 三.实验学时:6学时 四.实验原理: Base64是网络上最常见的用于传输8Bit ...

  9. 快速找出两个Word文档之间的差别

    我们经常会遇到这样的问题:两份Word文件之中,只有一些极为细小的区别,如果单纯通过人工的方法去进行校对,那么不仅效率很低,而且也容易出错,容易漏掉一些不太明显的区别.Word 2003已经内置了一个 ...

最新文章

  1. 编程之美-重建二叉树方法整理
  2. java实现遍历树形菜单方法——HibernateUtil实现
  3. 吴恩达深度学习笔记10-Course4-Week1【卷积神经网络】
  4. 001_汽车之家,新浪和360之间的交流
  5. SMI/慧荣/SM32**主控量产通用教程,PNY U盘量产!
  6. 我的世界服务器显示outofmemory,游戏中out of memory解决办法分享
  7. 在 Mac 上的“快捷指令”中如何调整基本隐私设置?
  8. 台达EH3系列PLC进行MODBUS RTU通信的具体方法和步骤(非常详细)
  9. Java判断字符串是否为空的几种方法
  10. 干货 | 每天十亿级数据更新,秒出查询结果,ClickHouse在携程酒店的应用
  11. startActivitystartActivities有什么不同?
  12. 用缠论做量化(买卖点/品种机会/策略应用全解读)
  13. html5编辑文章如何缩进,关于网页排版和文章编辑那些事
  14. java bigdecimal.round_down,java BigDecimal 的 setScale() 方法的 BigDecimal.ROUND_DOWN 舍入模式的BUG,坑...
  15. 开放下载 | 2022阿里妈妈技术年刊来啦!
  16. 《数据之美》读书笔记
  17. js数组查找最接近_js 2种方法从数组里面找到最接近某个数值的值(小于该指定值,并且大于其他值)...
  18. QT-磨砂玻璃效果实现
  19. 2021-2025年中国半导体硅片行业市场供需与战略研究报告
  20. 复制和克隆数组,实现数组空间自动增长

热门文章

  1. ioctl 控制CMD解析
  2. 多线程--->守护线程
  3. Photoshop创作动漫人像技巧【转】
  4. AX2012服务器配置--Windows Server 2012 如何实现多个用户远程桌面登陆?
  5. 网页设计是要学php还是java_网页设计师需要学习什么?
  6. Python基础_07_面向对象1
  7. (2)重置Surface后surface mouse无法连接问题的解决方法
  8. 只要做的是善事,即使作秀也温馨
  9. cogs 1755. 爱上捉迷藏
  10. 浏览器内核-Webkit