美文网首页
双倍字符串法

双倍字符串法

作者: 眼若繁星丶 | 来源:发表于2020-08-24 11:59 被阅读0次

    双倍字符串法


    LeetCode 459

    https://leetcode-cn.com/problems/repeated-substring-pattern/

    解题思路

    如题,可以将字符串放大一倍,然后去掉字符串开头,即从头开始遍历去找原字符串s,如果在s.length()之前找到,说明符合题意,在s.length()位置还没找到,则不符合。

    理由:双倍字符串ss,后半截s必然等于前半截s,我们从下标1 位置开始遍历寻找s,如果到后半截s位置即s.length(),还没找到,则说明前半截s不符合题意。

    双倍字符串原因:

    1.双倍字符串,并从1开始查找,相当于把s前缀挪到后面去,作为原s的一个补充,让后面的字符串够长。利用indexOf()可以找到匹配字符串的起始位置。

    2.作为前半截没有找到s的结束标志。前半截没找到,最终肯定会落到后半截s开头位置,此时就说明前半截即原字符串不符合,所以可以直接返回false。

    代码如下:

    class Solution {
        public boolean repeatedSubstringPattern(String s) {
            return (s + s).indexOf(s, 1) != s.length();
        }
    }
    

    相关文章

      网友评论

          本文标题:双倍字符串法

          本文链接:https://www.haomeiwen.com/subject/mffnjktx.html