zoukankan      html  css  js  c++  java
  • 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"))
    }
    
    
  • 相关阅读:
    查看本机上的端口使用情况netstat -an
    WCF中的由于目标计算机积极拒绝,无法连接
    联想G480安装CentOS电缆驱动器
    &quot;伪中国移动client&quot;--伪基站诈骗
    Median of Two Sorted Arrays--LeetCode
    poj3671Dining Cows(DP)
    更多RANK37
    《Java并发编程实战》第二章 线程安全 札记
    Windows下一个SlikSVN使用
    (一个)AngularJS获取贴纸Hello World
  • 原文地址:https://www.cnblogs.com/jiangdewen/p/15306073.html
Copyright © 2011-2022 走看看