列表

详情


NC331. 重复的子字符串

描述

给定一个字符串,请你判断这个字符串是否可以通过重复多次它的子字符串来构成。

数据范围:字符串长度 ,保证字符串中仅包含小写英文字母

示例1

输入:

"skjl"

输出:

false

示例2

输入:

"nowcodernowcoder"

输出:

true

原站题解

上次编辑到这里,代码来自缓存 点击恢复默认模板

C 解法, 执行用时: 5ms, 内存消耗: 688KB, 提交时间: 2022-04-16

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return bool布尔型
 *
 * C语言声明定义全局变量请加上static,防止重复定义
 */
#include<stdbool.h>
bool repeatSubstring(char* str ) {
    int len=strlen(str);
        for(int i=1;2*i<=len;i++){
            if(len%i==0){
                bool flag=true;
            for(int j=i;j<len;j++){
                if(str[j]!=str[j-i]){
                flag=false;
                break;
                }
                 
            }
                if(flag)
                    return true;
          }
        }
        return false;
}

Go 解法, 执行用时: 5ms, 内存消耗: 1216KB, 提交时间: 2022-06-19

package main

func repeatSubstring(str string) bool {
	var f bool
	for h := len(str) >> 1; h >= 1; h-- {
		f = true
		for i := 0; i+h < len(str); i++ {
			if str[i] != str[i+h] {
				f = false
				break
			}
		}
		if f {
			return true
		}
	}
	return false
}

Go 解法, 执行用时: 5ms, 内存消耗: 1264KB, 提交时间: 2022-04-10

package main
//import "fmt"

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return bool布尔型
*/
func repeatSubstring( str string ) bool {
    var repeat bool
    for gap:=len(str)>>1;gap>=1;gap--{
        repeat=true
        for i:=0;i+gap<len(str);i++{
            if str[i]!=str[i+gap]{
                repeat=false 
                break
            }
        }
        if repeat{
           return true  
        }
    }
    return false
}

Go 解法, 执行用时: 5ms, 内存消耗: 1320KB, 提交时间: 2022-06-02

package main
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param str string字符串 
 * @return bool布尔型
*/

func repeatSubstring( str string ) bool {
l := len(str)
	repeat := false
	for i := l / 2; i > 0; i-- {
		if l%i != 0 {
			continue
		}
		repeat = true
		y :=str[:i]
		for j:=1;j<l/i;j++{
			x:=str[i*j:i*(j+1)]
			if x !=y {
				repeat = false
				break
			}
		}
		if repeat{
			return true
		}
	}
	return false
}

C 解法, 执行用时: 6ms, 内存消耗: 664KB, 提交时间: 2022-06-19

bool repeatSubstring(char* str ) {
    int h = strlen(str);
    for (int i = 1; 2 * i <= h; i++) {
        if (h % i == 0) {
            bool f = true;
            for (int j = i; j < h; j++) {
                if (str[j] != str[j - i]) {
                    f = false;
                    break;
                }

            }
            if (f)
                return true;
        }
    }
    return false;
}

上一题