题目
思考
回文字符串
,是指的是 从前往后 和 从后往前 都是一样的
例如
这些都是回文
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 等等,我在想,我们再现实开发中没有黑盒系统进行验证,是自行验证问题,还是全权交付给测试验证呢?