力扣459(java)-重复的子字符串(简单)
题目:
给定一个非空的字符串 s ,检查是否可以通过由它的一个子串重复多次构成。
示例 1:
输入: s = "abab"
输出: true
解释: 可由子串 "ab" 重复两次构成。
示例 2:
输入: s = "aba"
输出: false
示例 3:
输入: s = "abcabcabcabc"
输出: true
解释: 可由子串 "abc" 重复四次构成。 (或子串 "abcabc" 重复两次构成。)
提示:
1 <= s.length <= 104
s 由小写英文字母组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/repeated-substring-pattern
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
先找出能被原串整除的子串长度 i,再截取出子串 t,然后依次判断s中每个间隔 i 的子串是否与 t 相同,相同则返回true,否则返回false。注意,因为子串至少要重复一次,因此子串的长度不会超过原串的一半,故只需要在[1, n/2]中找子串的长度就行。
代码:
2013-05-18:
KMP算法:我会写getnext的求解了,但是还是不太懂本题运用的原理,希望三刷的时候能透彻明白!
1 class Solution {
2 public boolean repeatedSubstringPattern(String s) {
3 int n = s.length();
4 if (n == 1) return false;
5 int[] next = new int[n];
6 getNext(s, next);
7 if (next[n-1] > 0 && n % (n - next[n-1]) == 0) return true;
8 return false;
9 }
10 public void getNext(String s, int[] next){
11 //初始化
12 int j = 0;
13 next[0] = 0;
14 for (int i = 1; i < s.length(); i++){
15 //处理不相同的情况
16 while (j > 0 && s.charAt(i) != s.charAt(j)){
17 j = next[j - 1];
18 }
19 //处理相同的情况
20 if (s.charAt(i) == s.charAt(j)) j++;
21 //更新next
22 next[i] = j;
23 }
24 }
25 }
小知识:
substring()使用:
1. s.substring(int beginlndex, int endIndex) : 该方法用于截取字符串中,从beginlIndex到索引的endlndex-1之间的的字符串,即截取的字符串不包括endlndex这个索引对应的字符--- [ beginlndex,endIndex);
2.s.substring(int beginlndex), endlndex是可以省略的(多态),endIndex缺省的情况下为截取到字符串的最后一位;
3.s.substring(str.length() - n),要求取字符串的后n位,可以先获取字符串的长度,将字符串的长度-n作为substring()方法的第一参数,就能实现截取字符串最后的n个字符的效果。
例如:s.substring(s.length()-3) :取字符串的后三位。
感悟:
今天也没有学会使用KMP来解题~最近几个题都是用KMP来优化解题,看了一大堆还是没学会,真的应了那句话,要么一开始就学会,要么一直学不会。
力扣459(java)-重复的子字符串(简单)的更多相关文章
- Java实现 LeetCode 459 重复的子字符串
459. 重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" ...
- LeetCode 459. 重复的子字符串(Repeated Substring Pattern)
459. 重复的子字符串 459. Repeated Substring Pattern 题目描述 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且 ...
- Leetcode 459.重复的子字符串
重复的子字符串 给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: ...
- 459 Repeated Substring Pattern 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000.示例 1:输入: "abab"输出: True解释: 可由 ...
- python面试题一个字符串是否由重复的子字符串组成
一,给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 输入: "abab" 输出: True 解释: 可由 ...
- [Swift]LeetCode459. 重复的子字符串 | Repeated Substring Pattern
Given a non-empty string check if it can be constructed by taking a substring of it and appending mu ...
- 【leetcode 简单】 第一百一十二题 重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...
- Leetcode459.Repeated Substring Pattern重复的子字符串
给定一个非空的字符串,判断它是否可以由它的一个子串重复多次构成.给定的字符串只含有小写英文字母,并且长度不超过10000. 示例 1: 输入: "abab" 输出: True 解释 ...
- 力扣561. 数组拆分 I-C语言实现-简单题
题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...
- 力扣566. 重塑矩阵-C语言实现-简单题
题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...
随机推荐
- react 修改页面title - react-document-title
安装 cnpm install --save react-document-title 引用 import DocumentTitle from 'react-document-title' 代码 & ...
- 【LLM】在Colab上使用免费T4 GPU进行Chinese-Llama-2-7b-4bit推理
一.配置环境 1.打开colab,创建一个空白notebook,在[修改运行时环境]中选择15GB显存的T4 GPU. 2.pip安装依赖python包 !pip install --upgrade ...
- 手撕fft算法--fft原理和源码解析
一 前言 在音频信号处理中,fft变换是一个无法绕过过去的存在.借着一次算法出来的机会,把fft熟悉一下不为过啊. 二 问题 这里,其实是由一个问题驱动的,那就是:怎么通过fft的变化来得 ...
- stm32 fatfs 文件系统分析和代码解析
一 文件系统: 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)或分区上的文件的方法和数据结构:即在存储设备上组织文件的方法.操作系统中负责管理和存储文件信息 ...
- JSF之Action 与ActionListener的区别
事件 检验 参数 事件产生 页面跳转 Action 有 无参数,不传入当前控件,有返回值 当铵钮被单击时产生事件.提交表单 返回页面---根据配置文件跳转 ActionLis ...
- 今日头条Linux 运维工程师面试真题
今日头条Linux 运维工程师面试真题 首先我们来看下今日头条 Linux 运维工程师招聘岗位要求: [岗位定义]系统运维工程师 [岗位薪资]10K-24K [基本要求]北京 / 经验 3-5 年 / ...
- drf(Book序列化练习、user表练习)
一. APIView版本 1. models.py from django.db import models # Create your models here. class CommonField( ...
- 记录--用js如何实现将手机号中间的几位数字变成****
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 今天,我们要实现一个很常见并且简单的功能:将手机号中间的几位数变成**** 这个功能其实很常见,比如我们微信的账号安全里面显示的手机号.掘 ...
- Moe RE - 【bugku】
发现好像没人写wp,虽然很简单但是写一个.... 题目 分析 下载文件打开,习惯首先丢到Exeinfo PE里看看有没有壳 没有壳的样子 那放心丢到IDA(64-bit)里面 一进去就看到很有嫌疑的字 ...
- 深度探索.NET Feature Management功能开关的魔法
前言 .NET Feature Management 是一个用于管理应用程序功能的库,它可以帮助开发人员在应用程序中轻松地添加.移除和管理功能.使用 Feature Management,开发人员可以 ...