zoukankan      html  css  js  c++  java
  • LeetCode 437 回文子串

    LeetCode 437 回文子串

    题目描述:给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。
    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

    执行用时:3 ms, 在所有 Java 提交中击败了91.69%的用户
    内存消耗:37.6 MB, 在所有 Java 提交中击败了91.75%的用户

    中心扩散

    class Solution {
        public int countSubstrings(String s) {
            /*边界条件*/
            if(s==null || s.length()==0) {
                return 0;
            }
            /*遍历每一个字符,使用中心扩散法计数*/
            int result = 0;
            for(int i=0; i<s.length(); i++) {
                result += count(i, s);
            }
    
            return result;
        }
    
        /*中心扩散计数*/
        public int count(int startIdx, String s) {
            int result = 1; //元素本身算一个回文子串
            int leftBound, riughtBound;
            //偶数情况(无中心,只向右看,避免重复)
            if(startIdx<s.length()-1 && s.charAt(startIdx)==s.charAt(startIdx+1)) {
                leftBound = startIdx-1;
                riughtBound = startIdx+2;
                result++;   //最中心处的对称
                result += centralDiffusion(leftBound, riughtBound, s);
            }
            //奇数(中心向两边看)
            if((startIdx>0 && startIdx<s.length()-1)) {
                leftBound = startIdx-1;
                riughtBound = startIdx+1;
                result += centralDiffusion(leftBound, riughtBound, s);
            }
    
            return result;
        }
    
        /*中心扩散*/
        public int centralDiffusion(int leftBound, int riughtBound, String s) {
            int result = 0;
            while(leftBound>=0 && riughtBound<=(s.length()-1)) {
                if(s.charAt(leftBound)!=s.charAt(riughtBound)) {
                    break;
                }
                leftBound--;
                riughtBound++;
                result++;
            }
            return result;
        }
    }
    
  • 相关阅读:
    MySQL高性能优化规范建议,速度收藏
    基于 debian 操作系统的 docker 镜像,安装 vim
    Vue 开发经验总结
    DNS 负载均衡
    图解:从单个服务器扩展到百万用户的系统
    defer、return、返回值,这三者的执行逻辑
    goroutine 知识点
    一条SQL语句在MySQL中如何执行的
    架构设计的常用方法
    vue中直接修改props中的值并未给出警告,为啥?
  • 原文地址:https://www.cnblogs.com/CodeSPA/p/13527324.html
Copyright © 2011-2022 走看看