算法题 - 字符串循环节

算法 {循环节} 1 阅读详情

目录

题目描述    

解题思路

参考解题

字符串的拆分 + 拼接

拆分 - substring函数

拼接


题目描述
   

我们规定对一个字符串的shift操作如下:

shift(“ABCD”, 0) = “ABCD”

shift(“ABCD”, 1) = “BCDA”

shift(“ABCD”, 2) = “CDAB”

换言之, 我们把最左侧的N个字符剪切下来, 按序附加到了右侧。

给定一个长度为n的字符串,我们规定最多可以进行n次向左的循环shift操作。如果shift(string, x) = string (0<= x <n), 我们称其为一次匹配(match)。求在shift过程中出现匹配的次数。

输入

 

输入仅包括一个给定的字符串,只包含大小写字符。

 

样例输入
 

byebyebye

输出

 

输出仅包括一行,即所求的匹配次数。

 

样例输出

 

3

 

时间限制C/C++语言:1000MS其它语言:3000MS

内存限制C/C++语言:65536KB其它语言:589824KB


解题思路

从头逐段拿取(0、1、2、3、……n-1个)将字符串拆分,然后将剩下的字符串和拿出来的拼接成新的字符串(就是拿出那一段往后拼接);

比较新的字符串和原来字符串是否相等,注意使用equals方法比较,这样比较的才是值;

 

参考解题

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String str = sc.nextLine();
		
		int count = 0;
		for (int i = 0; i < str.length(); i++) {
			String str1 = str.substring(i) + str.substring(0,i);
			if (str1.equals(str)) {
				count++;
			}
		}
		System.out.println(count);
	}
}

字符串的拆分 + 拼接

拆分 - substring函数

  • public String substring(int beginIndex)

例子:

 "unhappy".substring(2) returns "happy"
 "Harbison".substring(3) returns "bison"
 "emptiness".substring(9) returns "" (an empty string)
  • public String substring(int beginIndex, int endIndex)

返回一个字符串,该字符串是此字符串的子字符串。 子串开始于指定beginIndex并延伸到字符索引endIndex - 1 。 因此,子串的长度为endIndex-beginIndex 。

例子:

 "hamburger".substring(4, 8) returns "urge"
 "smiles".substring(1, 5) returns "mile"

拼接

 

String str1 = "hello";
String str2 = "fuck";

String str3 = str1 + str2; 

 

【matlab】MATLAB 变量详解与应用 在 MATLAB 中,变量可以通过赋值操作进行定义。例如,要定义一个名为xx = 10;在这个例子中,我们创建了一个名为x的变量,并将其赋值为 10。需要注意的是,MATLAB 是一种动态类型语言,因此不需要显式地声明变量的类型。变量名必须以字母开头。变量名可以包含字母、数字和下划线。变量名区分大小写。不要使用 MATLAB 中的关键字(如forif等)作为变量名。 阅读详情

相关推荐

【人工智能AI】是什么?

人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟延伸和扩展人的智能的理论方法技术及应用系统的一门新的技术科学。(百度百科)人工智能的基本原理:机器从「特定的」大量数据中总结规律,形成某些「特定的知识」,然后将这种「知识」应用到现实场景中去解决实际问题。在这个基本原理的基础上,有3个特征:1、人工智能本质上是一种工具2、人工智能技能只能解决特定的问题,而不是什么都能做3、人工智能属于归纳逻辑,可以告诉你是什么,但是不能告诉你为什么。

KJCZ.AK的博客 2万+

字符串最短循环节

循环节与最短循环节: 若某个字符串是由某个子串循环构成的,那么就称该子串为原串的循环节,长度最短的循环节就是最短循环节。 如abababab,abab和ab都是原串的循环节,而最短循环节是ab。 结论: 如果字符串 s 有个循环节 son,n = |s| , x = |son|,字符数组下标从1开始,那么: x 一定是 n 的约数。 那么s[1,n-x] = s[x, n] = son。 证明...

帅比王的博客 1万+

MATLAB新手必看:5分钟搞定直流无刷电机Simulink仿真(附完整模型下载)

本文为MATLAB新手提供直流无刷电机Simulink仿真的快速入门指南,涵盖从环境配置到速度控制闭环实现的完整流程。通过详细的模块选择和参数设置说明,帮助读者5分钟内搭建基础仿真模型,并附赠完整模型下载,助力快速掌握电机控制仿真技术。

efc123456的博客 984

Codeforces Round #797 (Div. 3) F(字符串循环节)

kmp

weixin_45666296的博客 692

Tesseract OCR 字库训练教程:提高识别率进阶版

通过 Tesseract 字库训练,你可以提高 OCR 对特定文本或字体的识别能力。训练过程包括准备训练数据、生成标签文件、运行训练工具,以及将训练结果集成到实际项目中。虽然训练过程需要一些时间和精力,但对于需要高精度文本识别的场景来说,字库训练是非常有效的提升识别率的方法。

小蜗牛的珍贵百宝箱 1865

最新小旋风蜘蛛池X6.21解密版+绕过授权带教程

介绍: 1.站群管理:用你的域名在这里添加网站 2.站点优化:站点互链,内容优化 2.系统设置:开启蜘蛛池 3.采集管理(可开启自动采集) 4.缓存设置:推荐开启tkd缓存 其他的用户根据自己的实际情况后台进行配置,通常以下: 1.后台首页(这里显示系统的大致概况) 2.系统设置:蜘蛛池的基本设置(访问开关、跳转、统计等等) 3.站群管理: 1.网站管理(用你的域名在这里添加网站) 2.模型管理(可构建不同类型站点:电影、文章、论坛等等) 3.TKDB调用模板(即:title、keywords、descri

百度SEO程序下载 2935

字符串方法find/rfind/rindex/index/count/replace

用dir(str)可以查询字符串的所有方法 1.find 语法:str.find(sub, [start,end) ) \\\\\根据指定的数据查找对应的索引 解释:在字符串中查找子串,如果找到,返回子串的第一个字符的index,否则返回 -1。 note1:可以指定搜索的范围,[start,end),find方法返回的不是布尔值,找到返回index,找不到返回-1。 note...

Ge_zi__的博客 907

从入门到精通:MATEKH743 飞控全解析——MAVLink 接口软/硬件对接实战

MATEKH743飞控是基于STM32H743微控制器的无人机核心控制系统,具备强大计算能力和丰富外设接口。该飞控采用双核架构,集成高性能IMU、气压计等传感器,支持多种开源固件(Betaflight/INAV/ArduPilot),适用于FPV穿越机、固定翼及工业无人机。相比PX4等飞控,MATEKH743在性价比和DIY友好度上优势明显,同时支持MAVLink协议实现设备通信。未来发展方向包括集成更高精度传感器、优化电源管理以及拓展工业应用场景,持续推动无人机技术创新。

bother3000的博客 2284

证明:如果一个字符串的最小循环节是不完全循环节,那么该字符串没有完全循环节

s[i]或sis_isi​表示字符串的第i个字符,从0开始。使用python切片写法表示字符串的子串s[x:y]表示字符串s下标范围为左闭右开区间[x, y)中的字符s[:y]等价于s[0:y]s[x:]等价于s[x:n]循环节:若某个字符串是由某个子串循环多次构成的,那么就称该子串为原串的循环节。(本文中循环节循环次数满足大于1次)sisikTsi​sikT​,k是整数。完全循环节:字符串由若干完整的循环节构成,这样的循环节叫完全循环节。

君义NOIP的博客 1515

树莓派4B+DroneKit实战:手把手教你用Python控制无人机飞行(附避坑指南)

本文提供了一份详尽的树莓派4B与DroneKit配置实战指南,涵盖从硬件选型、软件环境搭建到Python编程控制无人机的完整流程。文章重点解决了ARM架构下的兼容性问题、MAVLink通信配置及端口管理等常见难题,并附带了实用的避坑指南和代码示例,帮助开发者构建稳定可靠的无人机控制系统。

weixin_29056781的博客 410

手把手教你解决Kernel panic报错:init找不到的5种排查方法(附NFS挂载实战)

本文深入解析了Linux系统启动时出现“Kernel panic - not syncing: No working init found”报错的根本原因,并提供了五种系统性的排查方法。文章结合NFS挂载根文件系统的实战场景,详细阐述了从动态链接库依赖、内核引导参数、NFS权限配置、文件系统完整性到内核配置干扰的完整排查路径,帮助开发者快速定位并解决这一常见的系统启动故障。

weixin_29159995的博客 192

Sort String

链接:https://www.nowcoder.com/acm/contest/141/E 题目描述 Eddy likes to play with string which is a sequence of characters. One day, Eddy has played with a string S for a long time and wonders how could ma...

lml11111的博客 614

RK3588上使用PCIE接口的国产千兆网卡YT6801

YT6801是裕太微电子开发的一款国产千兆PCIE以太网控制器芯片,可作为RK3588的PCIE外扩网口使用。

荻夜的博客 8202

BZOJ 2795:[Poi2012]A Horrible Poem

2795: [Poi2012]A Horrible Poem Time Limit: 50 Sec  Memory Limit: 128 MB Submit: 518  Solved: 248 [Submit][Status][Discuss] Description 给出一个由小写英文字母组成的字符串S,再给出q个询问,要求回答S某个子串的最短循环节。 如果字符串B是字符

BlackJack 553

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

hdu1358 Period

地址:http://acm.hdu.edu.cn/showproblem.php?pid=1358 题目: Period Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 7830Accepted Submission(s): ...

weixin_30446197的博客 68

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

“强智杯“2020年湖南省大学生计算机程序设计竞赛(重现赛)B D H

B:2020 vs 2018 题目链接:2020vs2018 思路:由于各个数字之间的字符是由间隔的,因此只需要找出有特点的字符即可,我这边找的是数字1 代码: #include<iostream> using namespace std; #include<vector> #include<string> #include<map> typedef long long ll; const long long int maxn = 100; int n, m;

艾 1160

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

3.5打卡day26

本题一大难点在于带小数的模拟除法,结果分为整除与无限循环小数,题目要求找到循环节。分析可知当得到重复的余数时,就形成了循环。先计算出整数部分,后处理小数部分,记录下每次计算的余数和商,记录余数时还有记录其位置,便于后续找循环节。int N, D;// 整数部分// 初始余数// 整除的情况return 0;// 存储小数部分// 存储出现过的余数// 余数对应的位置// 循环开始位置// 当前小数位位置= 0) {// 检查余数是否重复if (it!

DDzqss的博客 222

kmp 算法

本文介绍了KMP算法的核心概念和应用。重点讲解了前缀函数的定义、计算方法和用途,包括字符串匹配、周期和循环节判断。通过将模式串与主串拼接后计算前缀函数,可以高效解决字符串匹配问题。文章还提供了KMP算法模板和两个典型题目(PowerStrings和RadioTransmission)的解法,展示了如何利用前缀函数求解字符串周期问题。最后比较了前缀函数版本和传统next数组版本的异同,指出两者本质相同。

2403_88695928的博客 1310

牛客练习赛36

Rabbit的字符串 就是最小表示法啊 #include<iostream> #include<cstdio> #include<cstring> #define M 2010000 using namespace std; int k,m,n,b,l,r; char c[M],d[M]; int Min(char *s, int n){ int i...

weixin_30875157的博客 112

10.18日志

和上题类似,但是有些需要注意的点,这题不再是字符串而是由数字组成的序列,不能被trie树的思想固定,认为我们要建一个tr[1e5][1e9]的树,这其中有很多空间是被浪费的,这里的tr并不是要建树而是边,那么我们就可以用map来表示,同时这题需要我们边动态的插入节点边进行不同子串的统计,那么我们每新插入一个节点,对答案的贡献其实就是len[np] - len[fa[np]],可以在插入的时候完成统计。

2302_79370417的博客 308

集美大学第九届程序设计竞赛 部分题解(待补充)

补题记录

weixin_63785821的博客 430

题目1545:蓝桥杯算法提高VIP-现代诗如蚯蚓

string n;cin>>n;i++){flag+=n[i];string a;j++){a+=flag;if(a==n){return 0;return 0;

x15943088920的博客 263

2026/3/1日打卡

1.目标是将左侧N个白棋与右侧N个黑棋交换位置,中间空格作为移动媒介。允许相邻移动或跨越一个异色棋子跳跃,要求用最少步数完成,最优步数为 N²+2N。2.解题核心是状态搜索与合法移动判断。每一步找到空格位置,枚举所有可能向空格移动的棋子(白棋只能向右,黑棋只能向左),生成新状态并继续搜索,直到达到目标状态。3.为保证最小字典序,需要按棋子位置从小到大枚举移动,并记录“移动棋子的原位置”而不是空格位置。找到第一个满足最短步数的解即可立即停止搜索。

zhw18712213728的博客 687

分数化小数(字符串)-基础题124th + 回文或镜面回文(字符串)-基础题125th + 数列2(一维数组)-基础题126th

分数化小数(字符串)-基础题124th + 回文或镜面回文(字符串)-基础题125th + 数列2(一维数组)-基础题126th

2302_76595844的博客 373

上机练习第42天

个人总结:通过长除法逐位计算小数,用哈希表记录余数出现位置检测循环节,循环节用括号标注,输出按76字符换行。

m0_67270331的博客 326

C++ |【机试】26.3.19

写一个程序,输入一个形如N/D的分数(N是分子,D是分母),输出它的小数形式。如果小数有循环节的话,把循环节放在一对圆括号中。例如, 1/3 = .33333333 写成0.(3)41/333 = 0.123123123... 写成0.(123)用xxx.0 表示整数典型的转化例子: 1/3 = 0.(3)22/5 = 4.42/2 = 1.0。

m0_74149727的博客 373
上一篇: 2020 美团笔试 - 回顾三道算法题
下一篇: 关于实用拜占庭协议 vs 实用同步拜占庭协议
Longtermevolution
博客等级 码龄9年 113粉丝 249原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值