JS模拟C语言经典四指针法

        // JS模拟C语言经典四指针法
        const checkReapetSubStr = (str1, str2) => {
            let maxLength = 0;
            let maxChar = '';
            // 声明指针
            let a = 0;
            let b = a + 1;
            let c = 0;
            let d = c + 1

            while (true) {
                // 如果a指针和c指针不同
                if (str1.charAt(a) !== str2.charAt(c)) {
                    c++
                    d++
                } else {
                    // 如果ac指针相同并且bd指针也相同那么移动bd指针
                    while (true) {
                        if (str1.charAt(b) === str2.charAt(d)) {
                            b++
                            d++
                            // 重置最大子串
                            if (b - a > maxLength) {
                                maxLength = b - a
                                maxChar = str1.substring(a, b)
                            }
                        } else {
                            // 如果bd指针不同那么重置c指针位置继续比较
                            c = d
                            d = c + 1
                            b = a + 1
                            break
                        }
                        if (b >= str1.length || d >= str2.length) {
                            break
                        }
                    }


                }
                //验收,c、d发生了增长,防止cd超标
                if (c >= str2.length || d >= str2.length) {
                    //如果c、d到头了,那么c、d归位,a右移
                    c = 0;
                    d = 1;
                    a++;
                    b = a + 1;
                }
                if (a >= str1.length) {
                    break
                }

            }
            return maxChar;
        }

 

posted on 2021-03-13 17:22  素心~  阅读(166)  评论(0编辑  收藏  举报

导航