当前位置: 首页 > news >正文

lintcode-200 最长回文字串

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

    原题链接:http://www.lintcode.com/zh-cn/problem/longest-palindromic-substring/#

    给出一个字符串(假设长度最长为1000),求出它的最长回文子串,你可以假定只有一个满足条件的最长回文串。

    给出字符串 "abcdzdcab",它的最长回文子串为 "cdzdc"

直接上代码:时间复杂度O(n^2)

public class Main {
    public static String longestPalindrome(String s) {
        // write your code here
        if (s == null || s.length() <= 1) {
            return s;
        }

        int start = 0;
        int end = 0;
        String result = "";
        int len = 0;
        String t = new StringBuilder(s).reverse().toString();
        for (int i = t.length() - 1, j, tmpJ = 0, tmpI; i < t.length(); i--) {
            if (i < 0) {
                i = 0;
                tmpJ++;
                if (tmpJ == s.length()) {
                    break;
                }
            } else {
                tmpJ = 0;
            }
            tmpI = i;
            boolean flag = false;
            for (j = tmpJ; j < s.length() && i < t.length(); j++, i++) {
                if (t.charAt(i) == s.charAt(j)) {
                    if (!flag) {
                        start = i;
                        end = i + 1;
                    } else {
                        end++;
                    }
                    flag = true;
                } else {
                    if (end - start > len) {
                        result = t.substring(start, end);
                        len = end - start;
                    }
                    flag = false;
                }
            }
            if (end - start > len) {
                result = t.substring(start, end);
                len = end - start;
            }
            i = tmpI;
        }

        return result;
    }

    public static void main(String[] args) {
        System.out.println(longestPalindrome("abecdzdcab"));
        System.out.println(longestPalindrome("bb"));
    }
}

    回文串: “回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串(来自百度百科)

    说一下程序的思路:对于"abecdzdcab"这个字符串,求其最长回文字串,可以转换为求“abecdzdcab”和其逆序“bacdzdceba”的最长公共子串,以前也没做过这种题,就自己想了个方法。

    程序中tmpI用于记录“bacdzdceba”字符串要比较的开始位置,tmpJ用于记录“abecdzdcab”字串串要比较的开始位置, flag为false表示要比较的两字符不相等或第一次相等,为true表示不是第一次相等。

    对于t = “bacdzdceba”, 从其 t.length() - 1位置开始,和s = "abecdzdcab"的0位置开始,逐个比较字符是否相等。如果是第一次相等,则令start = i, end = i + 1; 不是第一次相等,则只令end = end + 1; 如果两者不相等,则更新result。循环结束后,一定要记得再次更新result,否则result的值可能没办法得到更新(比如对于“bb”)。

转载于:https://my.oschina.net/yitiaoxianyu/blog/1514040

相关文章:

  • OpenGL ES3 非常好的系列文章
  • miaov-React 最佳入门
  • Next.js之基础概念(二)
  • 日志详解
  • High-Level Streams DSL(翻译)
  • seo优化中不容忽视的页面优化
  • predis连接redis sentinel和redis cluster
  • 4.NIO的非阻塞式网络通信
  • 远程通信的几种选择(RPC,Webservice,RMI,JMS的区别)
  • 从Code Review 谈如何做技术(zz)酷 壳
  • 大白话讲Zookeeper能做什么?(一):命名服务与配置管理
  • 大数据拼精准 可否触动电商个性营销神经
  • 二进制安装MySQL5.5.57
  • Ubuntu 安装和使用 Supervisor(进程管理)
  • 本地虚拟化开发环境 vagrant+virtualbox
  • angular组件开发
  • cookie和session
  • Docker入门(二) - Dockerfile
  • isset在php5.6-和php7.0+的一些差异
  • java小心机(3)| 浅析finalize()
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • Sass Day-01
  • SpringBoot 实战 (三) | 配置文件详解
  • Tornado学习笔记(1)
  • vue:响应原理
  • Vue实战(四)登录/注册页的实现
  • 关于字符编码你应该知道的事情
  • 技术发展面试
  • 聊一聊前端的监控
  • 思维导图—你不知道的JavaScript中卷
  • 学习Vue.js的五个小例子
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • 【干货分享】dos命令大全
  • 容器镜像
  • #{} 和 ${}区别
  • #微信小程序:微信小程序常见的配置传值
  • #在线报价接单​再坚持一下 明天是真的周六.出现货 实单来谈
  • (免费领源码)Java#Springboot#mysql农产品销售管理系统47627-计算机毕业设计项目选题推荐
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • (转)视频码率,帧率和分辨率的联系与区别
  • 、写入Shellcode到注册表上线
  • .naturalWidth 和naturalHeight属性,
  • .NET/C# 使用 SpanT 为字符串处理提升性能
  • .vue文件怎么使用_vue调试工具vue-devtools的安装
  • [ C++ ] STL---string类的模拟实现
  • [BIZ] - 1.金融交易系统特点
  • [C++]模板与STL简介
  • [CakePHP] 在Controller中使用Helper
  • [CareerCup] 2.1 Remove Duplicates from Unsorted List 移除无序链表中的重复项
  • [CISCN 2023 初赛]go_session
  • [Django 0-1] Core.Handlers 模块
  • [GDMEC-无人机遥感研究小组]无人机遥感小组-000-数据集制备
  • [Hibernate] - Fetching strategies