栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

每日刷题:第二十二天 重复的字符子串

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

每日刷题:第二十二天 重复的字符子串

思路:题目寻找的是一个字符串可否由某个部分重复构成,意思就是我将这些一个个小部分重新排布仍然等于原字符串,那么第一个思路就出来了

我一次挪动一个字符,将其挪到最后一位,若该字符串符合题意,则总有那么一个时候,挪动的字符串构成了题意中的某个部分,那么此时的字符串就等于原来的字符串

如图,该字符串由ABCD这个部分重复组成,意思就是我们将ABCD这个部分随意排序,那都等于原来字符串,上面的操作就是将第一个ABCD部分挪到最后一个ABCD处,那么怎么才能挪动呢,不管你这个部分是ABCD,ABCDEASDHNIOJOI....我一个一个字符挪动,总有能到达的那一刻(前提是该字符串符合题意),当挪动的个数为length-1时,还不相等,那么就说明这个字符串不符合题意了

优化:我们可以直接将两个字符串拼接在一起(代替之前挪很多次),那么现在这个问题就转化为,凭借之后的字符串(去头去尾)是否存在子串为原字符串(KMP算法)

思路就讲到这,代码实现也有,但我想重写一份KMP的,今天整理了KMP两个小时,还是没怎么搞明白,等搞明白了再发吧(不是故意拖的)

实现代码(java)

class Solution {
    public boolean repeatedSubstringPattern(String s) {
        return (s + s).substring(1,(s+s).length()-1).contains(s);
    }
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/827472.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号