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

    此博客链接:https://www.cnblogs.com/ping2yingshi/p/14335083.html

    回文子串

    题目链接:https://leetcode-cn.com/problems/palindromic-substrings/

    题目

    给定一个字符串,你的任务是计算这个字符串中有多少个回文子串。

    具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。

    示例 1:

    输入:"abc"
    输出:3
    解释:三个回文子串: "a", "b", "c"
    示例 2:

    输入:"aaa"
    输出:6
    解释:6个回文子串: "a", "a", "a", "aa", "aa", "aaa"

    题解

     先把字符串转成字符数组,然后把数组中的相同的元素下标当成value,数组元素当成key,一个字符串的子串由以下三种情况组成:

    1.判断统计每个key对应的value和有多少个(因为不同位置的相同字母算不同的子串,所以这里可以利用组合数求出一共有多少中可能性。

    2.一共有集中不同的字母。

    3.不同字母中,如果某个字母有超过两个字母并且下标第一个下标的值小于另外一个字母的下标,而后面的下标大于另外一个字母的下标,则也有可能成为回文数。

    代码

    class Solution {
        public int countSubstrings(String s) {
            int len=s.length();
            char arr[]=s.toCharArray();
            Map <Character,Integer> map=new HashMap();
            int count=0;
            for(int i=0;i<len;i++)
            {
                if(map.get(arr[i])==null)
                {
                    map.put(arr[i],i);
                }
                else{
                    map.put(i);
                }
            }
            for(char index:map.setKey())
            {
                if(map.get(index).size()>1)
                    count+=map.get(index).size()*(map.get(index).size()-1);
                else
                    count++;
            }
             return count;
        }
    }
    class Solution {
        public int countSubstrings(String s) {
            int len=s.length();
            int count=0;
            boolean [][] bool=new boolean [len][len];
            for(int i=0;i<len;i++)
            {
                bool[i][i]=true;
                count++;
            }
            for(int i=len-1;i>=0;i--)
            {
                for(int j=i+1;j<len;j++)
                {
                    if(s.charAt(i)==s.charAt(j))
                    {
                        if(j-i==1)
                        {
                            bool[i][j]=true;
                        }
                        // if(bool[i+1][j-1]==true)
                        // {
                        //     bool[i][j]=true;
                        // }
                        // else{
                        //     bool[i][j]=false;
                        // }
                        bool[i][j]=bool[i+1][j-1];
                    }
                    else
                    {
                        bool[i][j]=false;
                    }
                    if(bool[i][j]==true)
                    {
                        count++;
                    }
                }
            }
            return count;
        }
    }
    class Solution {
        public int countSubstrings(String s) {
            int len=s.length();
            int count=0;
            boolean [][] bool=new boolean [len][len];
            for(int i=0;i<len;i++)
            {
                bool[i][i]=true;
                count++;
            }
            for(int i=len-1;i>=0;i--)
            {
                for(int j=i+1;j<len;j++)
                {
                    if(s.charAt(i)==s.charAt(j))
                    {
                        if(j-i==1)
                        {
                            bool[i][j]=true;
                           
                        }
                        // if(bool[i+1][j-1]==true)
                        // {
                        //     bool[i][j]=true;
    
                        // }
                        // else{
                        //     bool[i][j]=false;
                        // }
                        else
                           bool[i][j]=bool[i+1][j-1];
                    }
                    else
                    {
                        bool[i][j]=false;
                    }
                    if(bool[i][j]==true)
                    {
                        count++;
                    }
                }
            }
            return count;
        }
    }

    结果

     

    出来混总是要还的
  • 相关阅读:
    Anaconda+Tensorflow环境安装与配置(转载)
    Win10 Anaconda下TensorFlow-GPU环境搭建详细教程(包含CUDA+cuDNN安装过程)(转载)
    设计模式之工厂方法模式VS简单工厂方法模式
    WPF之外观模式
    WPF之小动画三
    WPF之小动画二
    WPF之小动画一
    WPF之Behavior
    WPF之拖动项滚动条自滚动(当拖动项到达高度的边界时候滚动条自己可以上下滚动)
    WPF之给使用了模板的MenuItem添加快捷操作
  • 原文地址:https://www.cnblogs.com/ping2yingshi/p/14335083.html
Copyright © 2011-2022 走看看