欢迎===关注===点赞===评论,共同学习,共同进步!
------持续更新蓝桥杯入门系列算法实例--------
如果你也喜欢Java和算法,欢迎订阅专栏共同学习交流!
你的点赞、关注、评论、是我创作的动力!
-------希望我的文章对你有所帮助--------
专栏:蓝桥杯系列
目录
一、题目描述
二、解题思路
三、代码实现
四、秒杀算法 !
代码实现
一、题目描述
给定一个非空的字符串 s
,检查是否可以通过由它的一个子串重复多次构成。
示例 1:
输入: s = "abab" 输出: true 解释: 可由子串 "ab" 重复两次构成。
示例 2:
输入: s = "aba" 输出: false
示例 3:
输入: s = "abcabcabcabc" 输出: true 解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
二、解题思路
1、首先题目意思很简单,即判断是否是由子串重复构成,常规思路是进行枚举遍历。
2、注意:其最大子字符串为length/2,即一半,因此我们在寻找其可行的子字符串时范围设置为一半即可。
3、进行遍历,确定一个初始子串长度为L、
4、再次判断是否能被子串整除,可以则开始二重循环,逐个字母判断是否相同。
5、一旦出现某个长度的子字符串可以进行重构即返回true,否则如果最后仍没有符合条件的即false。
三、代码实现
public boolean repeatedSubstringPattern(String s) {
int Len=s.length();
for (int i=1;i*2<=Len;i++)
{
if (Len%i==0) {
boolean match=true;
for (int j=i;j<Len;j++){//从最靠近的字符开始逐一比对
if (s.charAt(j)!=s.charAt(j-i)){
match=false;
break;
}
}
if (match==true)
return true;
}
}
return false;
}
四、秒杀算法 !
1、假设字符串s是由重复字符串构成的,那么把s加倍,即s+s
2、令S=s+s,去掉S的头字母以及尾字母,如果其中包含S即说明s是符合条件的。
3、因此只需要一行代码即可!!
4、indexOf()方法是求字符串某个位置开始匹配目标串的第一个字符的索引值
5、例如s=abbcbba,
indexOf(bc,3)的值为4
代码实现
class Solution {
public boolean repeatedSubstringPattern(String s) {
return (s + s).indexOf(s, 1) != s.length();
}
}
发文不易,恳请大佬们高抬贵手!
点赞:随手点赞是种美德,是大佬们对于本人创作的认可!
评论:往来无白丁,是你我交流的的开始!
收藏:愿君多采撷,是大佬们对在下的赞赏!