题目分析:
比如:
给定"abcabcabcbb"的答案是"abc"
给定"120135435"答案是"201354",
看题可以知道其实题目要的只是元素不重复这个是关键点。我的想法就是将给定的字符串转化成数组,找到数组每一项向后找到的不重复的子串。在找到最长的那个就可以了,这样就很简单了。
举个🌰:
120135435 每一项向后找不重复的子串为 => 120 201354 01354 1354 354 543 435 35 5
代码:
const str = '120135435';
const fn = (d = '') => {
// 将目标值转化为数组
const arr = d.split('');
/**
* number为当前的索引值
* totalList为记录当前索引往后找的不重复子串的数组
* AllList是原数组
* recursion递归函数是用当前索引++的形式进行递归 当totalList中有重复的元素结束递归
*/
const recursion = (number = 0, totalList, Alllist) => {
// 当前的值
const strings = Alllist[number];
if (!totalList.some((v) => v === strings)) {
totalList.push(strings);
const n = number + 1;
return recursion(n, totalList, Alllist);
}
return totalList;
};
const newArr = arr.reduce((val, item, index, list) => {
const text = recursion(index, [], list).join('');
val.push(text);
return val;
}, []);
// 所有的子串获取到了后使用sort方法对长度进行排序就完成了
return newArr.sort((a, b) => {
return b.split('').length - a.split('').length;
})[0];
};
console.log(fn(str));
骐骥一跃,不能十步;驽马十驾,功在不舍