go 刷算法第二题——最长回文子串

描述

对于一个字符串,请设计一个高效算法,计算其中最长回文子串的长度。

给定字符串A以及它的长度n,请返回最长回文子串的长度。

示例1

输入:"abc1234321ab",12
返回值:7

思路: 穷举所有节点的方案。
满足条件时,存在以下两种情况

  1. index节点为对称轴节点 [...,1,2,1,...]
  2. index节点为对称轴左边第一个节点,对称轴不在节点上 [...,1,1,...]
package main
import (
"strings"
)
func solve(s string) int {
// 括号用递归处理
// 加减乘除由于乘除优先级更高的特性,所以采用临时数组保存加减因子,加减因子上附加的乘除运算先进行
// 最后统计临时数组的所有加减因子之和
// 声明一个存放临时数据的数组
ints := make([]int, 0)
// 下一个待入数组的数据的运算符,第一个为“+”
var operator byte = '+'
// 运算数字因子
tempNum := 0
// 字符串转数组
chars := []byte(s)
l := 0
for i := 0; i < len(chars); i++ {
c := chars[i]
// 0~9 字符是数字
if c >= '0' && c <= '9' {
tempNum = 10*tempNum + int(c-'0')
}
if '(' == c {
l++
start, end := i+1, i+1
for l != 0 {
if chars[end] == ')' {
l--
}
if chars[end] == '(' {
l++
}
end++
}
i = end - 1
tempNum = solve(s[start:end])
}
if strings.Contains("+-*/", string(c)) || i == len(chars)-1 {
switch operator {
case '+':
ints = append(ints, tempNum)
case '-':
ints = append(ints, -tempNum)
case '*':
ints[len(ints)-1] *= tempNum
case '/':
ints[len(ints)-1] /= tempNum
}
tempNum = 0
operator = c
}
}
result := 0
for _, el := range ints {
result += el
}
return result
}
func main() {
println(solve("1+2"))
println(solve("((10+2)*10-(100-(10+20*10-(2*3)))*10*1*2)-2"))
}
posted @   临渊不羡渔  阅读(100)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示