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

[leetcode] Longest Palindromic Substring

题目:(String)

Given a string S, find the longest palindromic substring in S. You may assume that the maximum length of S is 1000, and there exists one unique longest palindromic substring.

 

题解:自己先写了一个循环所有substring的,超时。

public class Solution {
    public String longestPalindrome(String s) {
        if(s.length()==0||s.length()==1||checkIsPalindrome(s))
           return s;
        
        int len = s.length();
        
        for(int i =len-1 ; i>=1 ;i--)
        {
            for(int j =0; j<=len-i; j++)
            {
                if(checkIsPalindrome(s.substring(j,j+i)))
                  return s.substring(j,j+i);
            }
        }
        
        return s;
    }
    
    public boolean checkIsPalindrome(String s)
    {
        Stack<Character> stack = new Stack<Character>();
        int len =s.length();
        if(len%2==0)
        {
            for(int i=0;i<len/2;i++)
            {
                stack.push(s.charAt(i));
            }
            
            for(int i=len/2;i<len;i++)
            {
                char temp = stack.pop();
                if(temp!=s.charAt(i))
                   return false;
            }
            return true;
        }
        else
        {
            for(int i=0;i<len/2;i++)
            {
                stack.push(s.charAt(i));
            }
            
            for(int i=len/2+1;i<len;i++)
            {
                char temp = stack.pop();
                if(temp!=s.charAt(i))
                   return false;
            }
            return true;
        }
    }
}

看了别人的方法:

第二种方法“是对于每个子串的中心(可以是一个字符,或者是两个字符的间隙,比如串abc,中心可以是a,b,c,或者是ab的间隙,bc的间隙,例如aba是回文,abba也是回文,这两种情况要分情况考虑)往两边同时进 行扫描,直到不是回文串为止。假设字符串的长度为n,那么中心的个数为2*n-1(字符作为中心有n个,间隙有n-1个)。对于每个中心往两边扫描的复杂 度为O(n),所以时间复杂度为O((2*n-1)*n)=O(n^2),空间复杂度为O(1)。”引自Code ganker(http://codeganker.blogspot.com/2014/02/longest-palindromic-substring-leetcode.html)

public class Solution {
    public String longestPalindrome(String s) {
        if(s.length()==0||s.length()==1)
           return s;
          
        String longest = s.substring(0,1);
        for(int i=0;i<s.length(); i++)
        {
            String temp = buildTheLargeSubstring(s,i,i);
            
            if(temp.length()>longest.length())
               longest =temp;
               
            temp = buildTheLargeSubstring(s,i,i+1);
            
            if(temp.length()>longest.length())
               longest =temp;
        }
        
        return longest;
    }
    
    public String buildTheLargeSubstring(String s, int begin, int end)
    {
        while(begin>=0&&end<=s.length()-1&&s.charAt(begin)==s.charAt(end))
        {
            begin--;
            end++;
        }
        
        return s.substring(begin+1,end);
    }
}

 

转载于:https://www.cnblogs.com/fengmangZoo/p/4183793.html

相关文章:

  • 【转】每天一个linux命令(52):ifconfig命令
  • CentOS 使用VMware虚拟机联网
  • [WPF系列]-基础 TextBlock
  • lua table长度解析
  • 大话设计模式---装饰模式
  • 利用EntityFramework获得双色球数据库
  • 2732: [HNOI2012]射箭( 半平面交 )
  • 消灭Bug!十款免费移动应用测试框架推荐
  • css引入讲解及media
  • oracle数据类型
  • 使用SQL Server Audit记录数据库变更
  • PHPCMS实现文章置顶功能的方法
  • 关于函数返回值的一些见解
  • Git 的是使用入门
  • Hover States - 有趣的用户界面及交互设计
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • [译] 怎样写一个基础的编译器
  • Java深入 - 深入理解Java集合
  • JS专题之继承
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • 阿里云应用高可用服务公测发布
  • 前端性能优化--懒加载和预加载
  • 日剧·日综资源集合(建议收藏)
  • hi-nginx-1.3.4编译安装
  • 整理一些计算机基础知识!
  • ​二进制运算符:(与运算)、|(或运算)、~(取反运算)、^(异或运算)、位移运算符​
  • ​一些不规范的GTID使用场景
  • #define 用法
  • (22)C#传智:复习,多态虚方法抽象类接口,静态类,String与StringBuilder,集合泛型List与Dictionary,文件类,结构与类的区别
  • (C语言)球球大作战
  • (Redis使用系列) SpirngBoot中关于Redis的值的各种方式的存储与取出 三
  • (四)图像的%2线性拉伸
  • (转)我也是一只IT小小鸟
  • (转)原始图像数据和PDF中的图像数据
  • .htaccess配置常用技巧
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)
  • .net经典笔试题
  • @ModelAttribute 注解
  • [2016.7 test.5] T1
  • [30期] 我的学习方法
  • [AIGC codze] Kafka 的 rebalance 机制
  • [C#] 如何调用Python脚本程序
  • [CUDA手搓]从零开始用C++ CUDA搭建一个卷积神经网络(LeNet),了解神经网络各个层背后算法原理
  • [Django 0-1] Core.Checks 模块
  • [docker] Docker的数据卷、数据卷容器,容器互联
  • [Google Guava] 1.1-使用和避免null
  • [I2C]I2C通信协议详解(一) --- 什么是I2C
  • [iOS]让Xcode 4.2生成的app支持老的iOS设备(armv6)
  • [Linux]进程创建➕进程终止
  • [python]用python获取EXCEL文件内容并保存到DBC
  • [UE4]动画蓝图的编辑全流程(Animation Blueprint)
  • [Unity]关于iOS申请因为Advertising Identifier问题被拒绝的解决方法
  • [Windows编程] stack overflow != stack buffer overflow
  • [初学C语言]个人易错总结
  • [汇编实操]DOSBox工具: unable to open input file: 文件名.asm问题解决