TOJ4127: Root of String
传送门:http://acm.tzc.edu.cn/acmhome/problemdetail.do?&method=showdetail&id=4127
4127: Root of String
时间限制(普通/Java):1000MS/3000MS 内存限制:65536KByte
描述
The root of string S is a shortest string T such that S=TTTTT...T. That is, you can obtain S by concatenating T with itself many times.
输入
Each case has a line with one non-empty string (no more than 255 characters) over the alphabet a,b,c,...,z.
输出
For each case, output the root of the string.
样例输入
aaaaaa
ababab
abca
样例输出
a
ab
abca
思路:题意是找字符串的循环节,考虑到循环节的长度只可能是本身长度的因数,即可以从1开始,遍历因数长度的所有情况,如果能找到循环节,那么就输出,如果找不到,那么循环节就是自己本身。
分割字符串可以调用string类中的substr函数。
代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string>
using namespace std;
int main(){
string s;
while(cin>>s){
int a[],ans = ;
for(int i = ; i < s.size() ; i++){
if(s.size() % i == ){
a[ans++] = i;
}
}//循环节肯定是字符串长度的因数
int f = ;//记录是否找到比本身短的字符串作为 循环节
for(int i = ; i < ans; i++){//从小到大遍历因数 长度的循环节
int flag = ;//记录是否找到循环节
int k = s.size()/a[i]; //记录个数
string str[];//保存分割的字符串
for(int j = ; j < k ; j++){
int x = j * a[i];
str[j] = s.substr(x,a[i]);
}
//从x位置开始,每 a[i]个长度分割字符串,调用substr函数分割字符串
for(int j = ; j < k ; j++){
if(str[j] != str[j-]){
flag = ;break;
}
}
if(flag){
f = ;
cout<<str[]<<endl;
break;
}//遍历分割好的字符串,如果是循环节就输出
}
if(f)cout<<s<<endl;//如果找不到比本身小的循环节,那么自身就是循环节
}
}
TOJ4127: Root of String的更多相关文章
- [Swift]LeetCode129. 求根到叶子节点数字之和 | Sum Root to Leaf Numbers
Given a binary tree containing digits from 0-9 only, each root-to-leaf path could represent a number ...
- [Swift]LeetCode988. 从叶结点开始的最小字符串 | Smallest String Starting From Leaf
Given the root of a binary tree, each node has a value from 0 to 25 representing the letters 'a' to ...
- 实体转xml 并以string输出
<?xml version="1.0" encoding="utf-8"?><Root> <Header> <Mess ...
- 转:Ogre源码分析之Root类、Facade模式
Ogre源码分析(一)Root类,Facade模式 Ogre中的Root对象是一个Ogre应用程序的主入口点.因为它是整个Ogre引擎的外观(Façade)类.通过Root对象来开启和停止Ogre是最 ...
- LC 988. Smallest String Starting From Leaf
Given the root of a binary tree, each node has a value from 0 to 25 representing the letters 'a' to ...
- Construct String from Binary Tree
You need to construct a string consists of parenthesis and integers from a binary tree with the preo ...
- 【LeetCode】988. Smallest String Starting From Leaf 解题报告(C++ & Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 DFS BFS 日期 题目地址:https://le ...
- [原创]java使用JDBC向MySQL数据库批次插入10W条数据测试效率
使用JDBC连接MySQL数据库进行数据插入的时候,特别是大批量数据连续插入(100000),如何提高效率呢?在JDBC编程接口中Statement 有两个方法特别值得注意:通过使用addBatch( ...
- Java开发中的23种设计模式详解
[放弃了原文访问者模式的Demo,自己写了一个新使用场景的Demo,加上了自己的理解] [源码地址:https://github.com/leon66666/DesignPattern] 一.设计模式 ...
随机推荐
- PHP + Apache 在 Linux(centos7)系统下的环境搭建,基于 yum
(本文采用的是 Centos7 的操作系统,简单起见,以下全部采用 yum 安装,有这么好用的东西为什么要自己去一个一个编译呢) 1, 安装 Apache => yum -y install ...
- docker tomcat镜像制作
推荐使用dockerfile(本文直接拉取tomcat需要进入容器自行安装vim):docker利用Dockerfile来制作镜像 1.查找Docker Hub上的tomcat镜像 [root@loc ...
- C#串口传输中文字符
发送: Encoding gb = System.Text.Encoding.GetEncoding("gb2312"); byte[] bytes = gb.GetBytes ...
- 完全分布式hadoop2.5.0安装 VMware下虚拟机centos6.4安装1主两从hadoop
请跟我走,从零开始搭建hadoop2.5.0环境.总览第一步:搭建三台能不用密码shh的虚拟机.第二步,装jdk,解压hadoop文件,配置环境变量和xml文件.第三步,复制克隆两个slave机器.调 ...
- Navicat Premium 12安装与激活
https://www.jianshu.com/p/42a33b0dda9c 若使用Navicat Premium 12.1.10.0请转至Navicat Premium 12.1.10.0安装与激活 ...
- 使用spring validation完成数据后端校验
前言 数据的校验是交互式网站一个不可或缺的功能,前端的js校验可以涵盖大部分的校验职责,如用户名唯一性,生日格式,邮箱格式校验等等常用的校验.但是为了避免用户绕过浏览器,使用http工具直接向后端请求 ...
- MySQL数据库备份工具mysqldump的使用(转)
说明:MySQL中InnoDB和MyISAM类型数据库,这个工具最新版本好像都已经支持了,以前可能存在于MyISAM的只能只用冷备份方式的说法. 备份指定库: mysqldump -h127.0.0. ...
- RN Component生命周期函数
https://www.race604.com/react-native-component-lifecycle/ 第一次加载时: getInitialProps getInitialState co ...
- java后端实习生面试题目
1.编程题:java从10000到99999找到AABB类型 public class Test1 { public static void main(String[] args) { String ...
- secureCRT工具下载和安装
本文主要提供secureCRT软件下载和安装操作指导,节约软件查找和安装时间. 使用环境 32位Windows系统 软件下载 secureCRT软件和注册机下载:secureCRT 安装步骤和注意事项 ...