leetcode -- 459. Repeated Substring Pattern【java细节优化 + 模式规律 + 数字规律排除 】


题目

Given a non-empty string check if it can be constructed by taking a substring of it and appending multiple copies of the substring together. You may assume the given string consists of lowercase English letters only and its length will not exceed 10000.

Example 1:

Input: "abab"

Output: True

Explanation: It's the substring "ab" twice.

Example 2:

Input: "aba"

Output: False

Example 3:

Input: "abcabcabcabc"

Output: True

Explanation: It's the substring "abc" four times. (And the substring "abcabc" twice.)

题意

给定一个非空字符串,检查是否有某一个子串重复构成该字符串。

  • 一个子串
  • 子串的整数倍 构成 目标字符串。


分析及解答

解法1:

【细节优化】(提升代码运行速度)

  • 【函数与变量】string.length() 若反复用到,通过len变量来进行存储,访问变量 比 访问函数要节省时间。
  • 【数组】array[ i ] 比 String.charAt(i) 要节省时间。
  • 【调整语句顺序】不要过早的定义变量,在变量有效范围内定义变量(堆,变量初始化需要花费时间)


public class RepeatedSubstringPattern {
	public boolean repeatedSubstringPattern(String s) {
		int len = s.length();
		char[] array = s.toCharArray();
		boolean isAllRepeated = false;
		
		for (int interval = 1; interval <= len / 2; interval++) {
			
			if (len % interval == 0) {
				boolean isOneRepeated = true;
				int count = len / interval;
				for (int i = 0; i < interval; i++) {
					for (int j = 0; j < count; j++) {
						isOneRepeated = isOneRepeated && (array[i] == array[i + j * interval]);
					}
				}
				isAllRepeated = isAllRepeated || isOneRepeated;
			}
		}
		return isAllRepeated;
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值