<script>
//首先封装一个判断数组是否有重复项的方法check
function check(arr) {
//声明一个空对象来记录数组每个元素出现的次数
let obj = {};
for (let i = 0; i < arr.length; i++) {
let char = arr[i];
//如果对象没有出现这一项,就在对象里设置这个key,value为1,否则就加一
if (obj[char] == undefined) {
obj[char] = 1
} else {
obj[char]++
}
}
for (let k in obj) {
if (obj[k] > 1) {
//对象里如果有出现一次以上的,则为假,返回false
return false
}
}
return true
}
function judgeSon(str) {
let arr = [];
for (let i = 0; i < str.length; i++) {
let count = 0;
//这个数组用来装字符串的项,在判断是否有重复的
let arr2 = [];
arr2.push(str.charAt(i));
for (let j = i + 1; j < str.length; j++) {
//放进数组
arr2.push(str.charAt(j))
//判断数组arr2是否有重复的,用之前封装的check方法
if (!check(arr2)) {
//如果有重复的
arr2.pop()//去掉最后一个
count = arr2.length;
//退出循环
break;
} else {
//没有重复的
count = arr2.length;
}
}
//推进arr里边便于后边作比较
arr.push(count)
}
//找出最大值
let max = Math.max(...arr);
//遍历数组,找出最大值的角标
let arr_total = [];
for (let k = 0; k < arr.length; k++) {
if (arr[k] == max) {
arr_total.push(k)
}
}
arr_total.forEach(item => {
console.log(`在角标为${item}的时候有最大的无重复子字符串,个数为${max}`)
})
}
judgeSon("abcdabjsjkfewnka")
</script>