给定一个字符串str,封装一个方法,找出其中不含有重复字符串的最长子串的长度,以及这个最长子串的位置

<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>

猜你喜欢

转载自blog.csdn.net/weixin_68067009/article/details/124216111