zoukankan      html  css  js  c++  java
  • LeetCode_459. Repeated Substring Pattern

    459. Repeated Substring Pattern

    Easy

    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.)
    package leetcode.easy;
    
    public class RepeatedSubstringPattern {
    	public boolean repeatedSubstringPattern(String s) {
    		// corner case
    		if (s == null || s.length() == 0) {
    			return true;
    		}
    		int n = s.length();
    		for (int len = n / 2; len >= 1; len--) {
    			if (n % len != 0) {
    				continue; // s length must can be divided by the pattern length
    			} else {
    				String pattern = s.substring(0, len); // pattern string
    				int i = len; // start index of 2nd pattern
    				int j = i + len - 1; // end index of 2nd pattern
    				while (j < n) {
    					String substr = s.substring(i, j + 1);
    					if (!pattern.equals(substr)) {
    						break; // failed for this pattern, try next pattern
    					} else {
    						i += len;
    						j += len;
    					}
    				}
    				// if it past the last substring check, i will be n
    				if (i == n) {
    					return true;
    				}
    			}
    		}
    		return false;
    	}
    
    	@org.junit.Test
    	public void test() {
    		System.out.println(repeatedSubstringPattern("abab"));
    		System.out.println(repeatedSubstringPattern("aba"));
    		System.out.println(repeatedSubstringPattern("abcabcabcabc"));
    	}
    }
    
  • 相关阅读:
    React 组件
    React JSX
    React基础
    equals和hashCode详解
    Hibernate 二级缓存配置
    如何正确地停止一个线程?
    常见的异常以及常用的包,类,及其接口。
    5.水果
    Java -- Web前端面试题及答案(需更深入了解)
    微信access_token请求之简单缓存方法封装
  • 原文地址:https://www.cnblogs.com/denggelin/p/12004163.html
Copyright © 2011-2022 走看看