zoukankan      html  css  js  c++  java
  • 5. Longest Palindromic Substring

    这道题的关键点在于,对于字符串的赋值操作要谨慎,尽量采用记录下标的方式,而不是整个字符串的赋值,这样可以节省时间。

    public class Solution {
        public String longestPalindrome(String s) {
            String res="";
            int size=s.length();
            int maxLen=0;
            int maxLeft=0;
            int maxRight=0;
            
            
            
            //奇数长度的回文串
            for(int i=0;i<size;i++)
            {
                String temp="";
                int len=1;
                temp+=s.charAt(i);
                int left=i-1;
                int right=i+1;
                while(left>=0&&right<size)
                {
                    if(s.charAt(left)==s.charAt(right))
                    {
                        //这种写法太耗时间
                        //temp=s.charAt(left)+temp;
                        //temp=temp+s.charAt(right);
                        len+=2;
                        left--;
                        right++;
                        
                    }
                    else
                        break;
                }
                if(len>maxLen)
                {
                    maxLen=len;
                    maxLeft=left;
                    maxRight=right;
                }
            }
            
            //偶数长度的回文串
            for(int i=0;i<size;i++)
            {
                String temp="";
                int len=0;
                int left=i;
                int right=i+1;
                while(left>=0&&right<size)
                {
                    if(s.charAt(left)==s.charAt(right))
                    {
                        //每次都进行一个新的字符串的创建,太消耗时间,这里只需要记录
                        //子串的下标即可
    //                    temp=s.charAt(left)+temp;
    //                    temp=temp+s.charAt(right);
                        len+=2;
                        left--;
                        right++;
                    }
                    else
                        break;
                }
                if(len>maxLen)
                {
                    //记录下最长子串的首尾即可
                    maxLen=len;
                    maxLeft=left;
                    maxRight=right;
                }
            }
            res=s.substring(maxLeft+1, maxRight);
            return res;
            
        }
    }
  • 相关阅读:
    A*算法的原理 <转>
    Unity性能优化之 Draw Call原理<转>
    关于XML中:XmlNode和XmlElement的涵义及不同之处
    MySql 数据库连接池
    代码中批量执行Oracle SQL语句
    科密指纹考勤机B329采集
    VB网络编程(webbrowser+Inet+抓包封包+经验)
    Lambda表达式
    网络编程
    多线程
  • 原文地址:https://www.cnblogs.com/aguai1992/p/5754242.html
Copyright © 2011-2022 走看看