力扣 5. 最长回文子串 暴力破解

Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情

题目

思考

回文字符串,是指的是 从前往后 和 从后往前 都是一样的

例如

这些都是回文

abba

abcxcba

而这不是

abab

我们用本办法解决该问题

  1. 我们可以将字符串所有的回文都找出来
  2. 比较回文中最长那一个返回回去即可

如何判断是否是回文字符串

只需要一个判断头,一个判断尾巴,依次向中间靠拢到字符的中间节点,判断头和尾相等,就可以完成回文字符串的判断

图即

如何找出所有的回文字符串

按照上文所述判断是否是回文字符串所述,我们可以将字符串分割为如下几个步骤

也以 abcdedcba 为例子

我们可以分别计算这几个是否是回文字符即可

判断1

判断2

直至

我们只需要将这些 回文字符 收集起来,用以判断哪个更长即可

abcdedcba 去重后共有这几个回文字符 abcdedcba bcdedcb cdedc ded a b c d e

代码

func longestPalindrome(s string) string {
	if 0 == len(s) {
		return ""
	}
	huiwenok := true
	i1 := 0
	j1 := 0
	huiwenstrings := make([]string,0)

	for i:=0;i<len(s);i++ {
		for j:=len(s)-1;j>=i;j-- {
			huiwenok = true
			if s[i] == s[j] {
				centers := int((i+j) / 2)
				i1 = i
				j1 = j

				for {
					if j1 <= centers {
						break
					}
					if s[i1] != s[j1] {
						huiwenok = false
						break
					}
					i1++
					j1--
				}
			} else {
				huiwenok = false
			}

			if huiwenok == true {
				if i <= j {
					huiwenstrings = append(huiwenstrings, s[i:j+1])
				}
			}
		}
	}
    
	oklen := 0
	for k,_ :=range huiwenstrings {
		if len(huiwenstrings[oklen]) < len(huiwenstrings[k]) {
			oklen = k
		}
	}
	return huiwenstrings[oklen]
}

采用的是暴力破解法,中间也出来很多纰漏没有考虑到的,比如 字符串长度为0 等等,我在想,我们再现实开发中没有黑盒系统进行验证,是自行验证问题,还是全权交付给测试验证呢?

posted @ 2022-03-30 10:45  pdudos  阅读(0)  评论(0)    收藏  举报  来源