leetcode647回文子串

leetcode647 Palindromic Substrings

Posted by BY on May 30, 2019

前言

新的一年,好好学习。

正文

问题来源

本问题来自leetcode上的647题。

问题描述

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

示例 1:

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

示例 2:

输入: "aaa"
输出: 6
说明: 6个回文子串: "a", "a", "a", "aa", "aa", "aaa".

分析:

func countSubstrings(s string) int {
    ans := 0
    for i := 0; i < len(s); i++ {
        for j := 0; (i-j>=0)&&(i+j<len(s))&&(s[i-j]==s[i+j]); j++ {
            ans++
        }
        for j := 0; (i-j-1>=0)&&(i+j<len(s))&&(s[i-j-1]==s[i+j]); j++ {
            ans++
        }
    }
    return ans
}
func countSubstrings(s string) int {
    res := 0
    ls := 2*len(s)-1
    for i := 0; i < ls; i++ {
        l, r := i/2, i/2+i%2
        for l >= 0 && r < len(s) && s[l] == s[r] {
            l--
            r++
            res++
        }
    }
    return res
}

总结:

勤思考。

结语

不管怎么样好好加油。