力扣 5. 最长回文子串 暴力破解
Offer 驾到,掘友接招!我正在参与2022春招打卡活动,点击查看活动详情。
题目
思考
回文字符串,是指的是 从前往后 和 从后往前 都是一样的
例如
这些都是回文
abba
abcxcba
而这不是
abab
我们用本办法解决该问题
- 我们可以将字符串所有的回文都找出来
- 比较回文中最长那一个返回回去即可
如何判断是否是回文字符串
只需要一个判断头,一个判断尾巴,依次向中间靠拢到字符的中间节点,判断头和尾相等,就可以完成回文字符串的判断
图即
如何找出所有的回文字符串
按照上文所述判断是否是回文字符串所述,我们可以将字符串分割为如下几个步骤
也以 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 等等,我在想,我们再现实开发中没有黑盒系统进行验证,是自行验证问题,还是全权交付给测试验证呢?
欢迎转发!
请保留源地址: https://www.cnblogs.com/NoneID

浙公网安备 33010602011771号