题目描述
分析
如果一个字符串是 nice 的,说明里面没有一个字符让他不 nice,也就是说,所有的字符在这个串里都有对应的大小写
因此只要有一个字符导致了当前的字符串不 nice,最长的 nice 字符串只能是以该字符所在位置为边界去截取左右两边
在做上述检查
算法
递归
过程
检查所有的字符
需要一个字符是不合法的,就去递归它的左右字串,返回长的那个
代码
/**
* @param {string} s
* @return {string}
*/
var longestNiceSubstring = function (s) {
if (s.length < 2) return ""
for (let i = 0; i < s.length; i++) {
const c = s.charCodeAt(i)
if (
(c < 97 && s.indexOf(String.fromCharCode(c + 32)) === -1) ||
(c >= 97 && s.indexOf(String.fromCharCode(c - 32)) === -1)
) {
const s1 = longestNiceSubstring(s.substring(0, i)),
s2 = longestNiceSubstring(s.substring(i + 1))
if (s1.length >= s2.length) return s1
return s2
}
}
return s
}