题目
给定一个字符串只包含字母和数字
按要求找出字符串中的最长连续子串的长度
字符串本身是其最长的子串
子串要求
- 只包含一个字母
(a~z A~Z)
其余必须是数字 - 字母可以在子串中的任意位置
如果找不到满足要求的子串 比如说,全是字母或数字则返回-1
输入
字符串只包含字母和数字
输出
子串的长度
示例一
输入
abC124ACb
输出
4
说明
满足条件的最长子串是 C124
或者 124A
长度都是 4
示例二
输入
a5
输出
2
说明
自身就是满足条件的子串长度为 2
示例三
输入
aBB9
输出
2
说明
说明满足条件的子串为 B9
示例四
输入
abcdef
输出
-1
说明
没有满足要求的子串,返回-1
做法
没想到什么太精妙的正则办法,最后就用了最常规的最长子串做法——剪枝双循环,通过正则判断是否符合条件
Python 代码实现
import re
line = 'ab666cde6f'
le = len(line)
ml = 0
for i in range(le):
for j in range(i + 1 + ml, le + 1):
ts = line[i:j]
zl = re.findall('[a-zA-Z]', ts)
nl = re.findall('\d', ts)
if len(zl) > 1:
break
if zl and nl:
ml = max(ml, len(zl) + len(nl))
if ml == 0:
print(-1)
else:
print(ml)