459. 重复的子字符串

459. 重复的子字符串

难度:简单
2020/8/24每日一题打卡
题目描述
459. 重复的子字符串_第1张图片

解题思路

1、构造重复字符串

想法很巧妙啊,大概是这辈子我也想不出来的方法哈哈哈
比如说abcabc,两个拼一起就是 a【bcabcabcab】c
去掉首尾两个字符,实际上就是破除了循环
看剩下的字符中是否包含原来的子串,如果包含则说明存在循环,如果不包含则不存在
相当于模拟那个滑动窗口的过程

/*
			  * 459. 重复的子字符串
			  * 2020/8/24
			  */
			 public boolean repeatedSubstringPattern(String s) {
				 String str = s + s;
			     return str.substring(1, str.length() - 1).contains(s);

			    }

459. 重复的子字符串_第2张图片

2、正经暴力法

想法是按照能被整除的长度分开一个一个的字串,然后判断这个子串能不能重复组成整个字符串

public boolean repeatedSubstringPattern(String s) {
				 int n = s.length();
				 for (int i = n/2; i >= 1; i--) {
					if(n%i == 0) { 
						System.out.println(i);
						int num = n/i;
						String temp = s.substring(0,i);
						int j = 1;
						for (; j < num; j++) {
							System.out.println(temp+" "+s.substring(j*i,j*i+i));
							if(!temp.equals(s.substring(j*i,j*i+i))) { //如果出现不相等,跳出本次循环
								break;
							}
						}
						
						if(j == num)
							return true;
					}
				}				 
				 return false;

			    }

459. 重复的子字符串_第3张图片

你可能感兴趣的:(力扣刷题笔记)