算法竞赛入门 -周期串
introduce
如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以为周期。例如,abcabcabcabc以3为周期(注意,它也以6和12为周期)。输入一个长度不超过80的串,输出它的最小周期。
随便扯扯
不是个专门ac的人,只是无聊刷刷题,也没有特地去网站编译通过,只是看了下结果差不多。就算自己闲的无聊瞎写的吧
Code
- c++
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
using namespace std;
int main()
{
string s;
cout << "输入一个字符串" << endl;
cin >> s;
int len = (int) s.length();
int i;
for(i = 1; i <= len; i++)
if (len % i == 0)
{
int j, flag = 1;
for(j = i; j < len; j++) {
if (s[j] == s[j % i])
continue;
else {
flag = 0;
break;
}
}
if(flag) {
cout << i << endl;
break;
};
}
return 0;
}
- js
<script>
let calculate1 = str => {
let len = str.length;
for (var i = 0; i != len; i++) {
if (len % i == 0) {
var j,
flag = 1;
}
for (var j = i; j < len; j++) {
if (str[j] == str[j % i]) {
continue;
} else {
flag = 0;
break;
}
}
if (flag) {
console.log(i);
break;
}
}
}
calculate1("ababab");
calculate1("aaabbbaaabbbaaabbb");
let splitArrayByLen = (str,len) => {
var reg = new RegExp(".{"+ len +"}",'g');
var strArr = str.match(reg);
return strArr;
}
let calculate2 = str => {
let len = str.length;
var flag = 1;
var newArr = [];
for (var i = 2; i != len; i++) {
if (len % i == 0) {
flag= 1;
newArr = splitArrayByLen(str, i);
for (var idx = 1, item = newArr.length; idx != item; idx ++) {
if (newArr[0] != newArr[idx]) {
flag = 0;
break;
}
}
if (flag == 1) {
console.log(i, newArr[0]);
}
}
}
}
calculate2("ababab");
calculate2("aaabbbaaabbbaaabbb");
</script>
Writer&Contact
{
"name":"Jontyy" ,
"email": " jontyy@163.com",
"gitHub" : "https://github.com/YJD199798/jontyy-ac"
}