2021-12-22:回文子串。
给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。
回文字符串 是正着读和倒过来读一样的字符串。
子字符串 是字符串中的由连续字符组成的一个序列。
具有不同开始位置或结束位置的子串,即使是由相同的字符组成,也会被视作不同的子串。
示例 1:
输入:s = “abc”,
输出:3,
解释:三个回文子串: “a”, “b”, “c”。
示例 2:
输入:s = “aaa”,
输出:6,
解释:6个回文子串: “a”, “a”, “a”, “aa”, “aa”, “aaa”。
提示:
1 <= s.length <= 1000,
s 由小写英文字母组成。
力扣647。

答案2021-12-22:

马拉车算法。每个中心求个数然后求和。
时间复杂度:O(n)。
空间复杂度:O(n)。

代码用golang编写。代码如下:

package main

import "fmt"

func main() {
s := "moonfdd"
ret := countSubstrings(s)
fmt.Println(ret)
} func countSubstrings(s string) int {
if len(s) == 0 {
return 0
}
dp := getManacherDP(s)
ans := 0
for i := 0; i < len(dp); i++ {
ans += dp[i] >> 1
}
return ans
} func getManacherDP(s string) []int {
str := manacherString(s)
pArr := make([]int, len(str))
C := -1
R := -1
for i := 0; i < len(str); i++ {
if R > i {
pArr[i] = getMin(pArr[2*C-i], R-i)
} else {
pArr[i] = 1
}
for i+pArr[i] < len(str) && i-pArr[i] > -1 {
if str[i+pArr[i]] == str[i-pArr[i]] {
pArr[i]++
} else {
break
}
}
if i+pArr[i] > R {
R = i + pArr[i]
C = i
}
}
return pArr
} func manacherString(str string) []byte {
charArr := []byte(str)
res := make([]byte, len(str)*2+1)
index := 0
for i := 0; i != len(res); i++ {
if i&1 == 0 {
res[i] = '#'
} else {
res[i] = charArr[index]
index++
}
}
return res
} func getMin(a, b int) int {
if a < b {
return a
} else {
return b
}
}

执行结果如下:


左神java代码

2021-12-22:回文子串。 给你一个字符串 s ,请你统计并返回这个字符串中 回文子串 的数目。 回文字符串 是正着读和倒过来读一样的字符串。 子字符串 是字符串中的由连续字符组成的一个序列。的更多相关文章

  1. 指定字符串 s,返回 s 所有可能的子串,每个子串必须是一个回文(指顺读和倒读都一样的字符串)

    Given a string s, partition s such that every substring of the partition is a palindrome Return all ...

  2. 2021.12.10 P5041 [HAOI2009]求回文串(树状数组求逆序对)

    2021.12.10 P5041 [HAOI2009]求回文串(树状数组求逆序对) https://www.luogu.com.cn/problem/P5041 题意: 给一个字符串 \(S\) ,每 ...

  3. HDU 4622 求解区间字符串中的不同子串的个数

    题目大意: 给定一个长度<2000的串,再给最多可达10000的询问区间,求解区间字符串中的不同子串的个数 这里先考虑求解一整个字符串的所有不同子串的方法 对于后缀自动机来说,我们动态往里添加一 ...

  4. C语言strstr()函数:返回字符串中首次出现子串的地址

    今天又学到了一个函数 头文件:#include <string.h> strstr()函数用来检索子串在字符串中首次出现的位置,其原型为:    char *strstr( char *s ...

  5. 【leetcode-03】给定一个字符串,请你找出其中不含有重复字符的最长子串的长度

    开个新坑,leetcode上面做题目.下面是题目描述: <!-- 给定一个字符串,请你找出其中不含有重复字符的最长子串的长度. 示例 1: 输入: "abcabcbb" 输出 ...

  6. 【Java】获取两个字符串中最大相同子串

    题目 获取两个字符串中最大相同子串 前提 两个字符串中只有一个最大相同子串 解决方案 public class StringDemo { public static void main(String[ ...

  7. 《天书夜读:从汇编语言到windows内核编程》七 内核字符串与内存

    1)驱动中的字符串使用如下结构: typedef struct _UNICODE_STRING{ USHORT Length; //字符串的长度(字节数) USHORT MaximumLength; ...

  8. Python之字符串中是否包含子串的几种方法

    #第一种方式 :in a='abcdaac' b='a' c='db' print(b in a) print(c in a)  预览结果 #第二种方式:count()方法 a='abcdefgab' ...

  9. 一文读懂 Serverless,将配置化思想复用到平台系统中

    作者 | 春哥大魔王 来源 | Serverless 公众号 写在前面 在 SaaS 领域 Salesforce 是佼佼者,其 CRM 的概念已经扩展到了 Marketing.Sales.Servic ...

  10. 输入一个字符串,内有数字和非数字字符。例如:a123x456 17960 302tab5876。将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1]……统计共有多少个整数,并输出这些数。

    题目内容:输入一个字符串,内有数字和非数字字符.例如:a123x456 17960 302tab5876.将其中连续的数字作为一个整数,依次存放到一维数组a中,例如123放在a[0],456放在a[1 ...

随机推荐

  1. day2 java基础语法

    day1复习 1.java的特点 2.jdk,jre,jvm的关系 3.为什么要配置path  基本语法 1.关键字与保留字 2.标识符与标识符规则 3.java的命名规范 起名时提高阅读性尽量有意义 ...

  2. Linux 基础命令2

    一.输出重定向命令 : > />> 1.ls > 1.txt 把命令返回的结果输出到文件中,会覆盖之前的数据,默认情况命令返回的结果显示在屏幕中: 2.Ls >1.txt ...

  3. reduce处理相同id合并对象内容为数组

    例: let arr = [     {         situationId: '666666666666666666666',         cloundClass: '999',     } ...

  4. Web For Pentester - SQL injections/Directory traversal

    SQL injections Example 1 典型的SQL注入 name=root' or 1=1 %23 直接执行就可以导出所有用户 查看后端的源码 观察到,我们传入入的name中,传入就成为了 ...

  5. Spring--AOP切入点表达式

    AOP工作流程 能够与做代理的那个类匹配得上的话,叫做代理对象,否则为原始对象. (SpringAOP的本质:代理模式) AOP的切入点表达式 切入点表达式描述的标准格式 描述方式一:定位到某某包下的 ...

  6. Kubecost - Kubernetes 开支监控和管理

    ️URL: https://www.kubecost.com/ Description: Kubeccost 为使用 Kubernetes 的团队提供实时成本可视化和洞察,帮助您持续降低云成本. 昨天 ...

  7. MySQL学习(十一)为什么不推荐使用uuid和雪花id

    参考博客:https://www.cnblogs.com/wyq178/p/12548864.html 自增的主键的值是顺序的,所以Innodb把每一条记录都存储在一条记录的后面.当达到页面的最大填充 ...

  8. ISCTF 2022

    Re SigninReverse ida 64 位 打开程序,即可获得flag ISCTF{27413241-9eab-41e2-aca1-88fe8b525956} ezbase # coding= ...

  9. 宏任务&微处理

    事件循环 JavaScript 语言的一大特点就是单线程,同一个时间只能做一件事.为了协调事件.用户交互.脚本.UI 渲染和网络处理等行为,防止主线程的不阻塞,Event Loop 的方案应用而生. ...

  10. 开源规则引擎——ice:致力于解决灵活繁复的硬编码问题

    背景介绍 业务中是否写了大量的 if-else?是否受够了这些 if-else 还要经常变动? 业务中是否做了大量抽象,发现新的业务场景还是用不上? 是否各种调研规则引擎,发现不是太重就是接入或维护太 ...