给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。
#include <iostream>
using namespace std;
int main()
{
string str;
cin>>str;
int fPos = 0,rPos =1,sLen = 1;
int len = str.size();
for(;rPos < len ; rPos++ ){
if(str[fPos] == str[rPos]){//如果匹配,则fPos++
fPos++;
}else{
sLen = rPos+1;//如果不匹配,则认为0~rPos之间为子串,其长度为rPos+1
fPos = 0;
}
if(fPos == sLen && rPos != len -1){
fPos = 0;//如果匹配到当前子串的结尾,则从子串开头匹配。
}
}
if(fPos != sLen ){
cout<<"false"<<endl;
}else{
cout<<str.substr(0,sLen)<<endl;
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
int main() {
string s; cin >> s;
int n = s.length();
int ans = 0;
for (int i=1; i<=n/2; i++) {
if (n % i != 0) { continue; }
bool flag = true;
for (int j=0; j<n; j++) {
if (s[j] != s[j%i]) {
flag = false;
break;
}
}
if (flag) ans = i;
}
if (ans == 0) cout << "false" << endl;
else {
cout << s.substr(0, ans) << endl;
}
return 0;
}
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String str = br.readLine().trim();
int n = str.length();
String res = "false";
for(int end = 1; end <= n / 2 + 1; end++){
int times = n / end; // 重复次数
if(times * end == n && str.equals(repeat(str.substring(0, end), times))){
res = str.substring(0, end);
}
}
System.out.println(res);
}
private static String repeat(String s, int times) {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < times; i++){
sb.append(s);
}
return sb.toString();
}
} #include <bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int n=s.length(), p=0, q=1, l=1;
while(q < n){
if(s[p] == s[q])
p++;
else{
l = q + 1;
p = 0;
}
if(p==l && q!=n-1)
p = 0;
q++;
}
if(p==l)
cout<<s.substr(0, l)<<endl;
else
puts("false");
return 0;
} import java.util.Scanner;
public class Main {
public static void main(String[] args) {
String base = new Scanner(System.in).next().trim();
char head = base.charAt(0);
int index = base.indexOf(head, 1);
String result = null;
while (index != -1 && index <= (base.length() / 2)) {
String tmp = base.substring(0, index);
if (base.replaceAll(tmp, "").length() == 0) {
result = tmp;
}
index = base.indexOf(head, index + 1);
}
System.out.println(result != null ? result : false);
}
} import java.util.Scanner;
public class Main_09 {
public static void main(String[] args) {
Scanner s = new Scanner(System.in);
while(s.hasNext()){
String str = s.next();
int start=0;
int stop=str.length()-1;
//不能输出本身,所以至少有两个
int mid = (start+stop)/2;
//标记是否发现符合要求的子串
boolean flag = false;
for(int i=start;i<=mid;i++){
if(findsame(str,0,i)){
System.out.println(str.substring(0,i+1));
flag = true;
break;
};
}
if(!flag){
System.out.println("false");
}
}
}
public static boolean findsame(String str,int start,int stop){
boolean flag = true;
int length = stop-start+1;
//如果不整除,则一定不是符合的子串
if(str.length()%length==0){
for(int i=0;i<str.length()/length-1;i++){
if(!str.substring(start,stop+1).equals(str.substring(start+(i+1)*length,stop+length*(i+1)+1))){
flag = false;
}
}
}else {
flag = false;
}
return flag;
}
}
package MerchantsBank;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class IsStitchBySubString {
static String p(String str) {
int i=0,j=1;
//找到第一个可能的子串,str[j]与str[0]相同
for(;j<str.length();j++) {
if(str.charAt(0)==str.charAt(j))
break;
}
int k=j;
while(k<str.length()) {
for(i=0,j=k;i<str.length()&&j<str.length();i++,j++) {
if(i==k)
i=0;
if(str.charAt(i)!=str.charAt(j))
break;
}
if(j==str.length()&&i==k)
return str.substring(0, k);
else
k++;//如果不是子串,结束位置往后移动。
}
return "false";
}
public static void main(String[] args) throws IOException {
// TODO Auto-generated method stub
// String str="abcabc";
BufferedReader scanner = new BufferedReader(new InputStreamReader(System.in));
String str = scanner.readLine();
String res=p(str);
System.out.println(res);
}
} def func(x): a=set(x) l=len(a) b=[] for i in range(l): b.append(x[i]) for i in range(len(x)): c=i%l if x[i]==b[c]: continue else: return False return True
import java.util.Scanner;
public class test {
public static void main(String[] args) {
Scanner input=new Scanner(System.in);
System.out.println("请输入一个字符串");
String n=input.nextLine();
String m=n.substring(0, 1); //字符串第一个字符 int a=n.indexOf(m,1); //查询第一个字符第二次出现的位置 if(a<0){
System.out.println("false"); //若只有不重复的字符串,返回false }else{
String b=n.substring(0,a); if(n.length()%b.length()!=0){
System.out.println("false"); //若输入字符串长度不是重复字符串长度的倍数,返回false }else{
boolean flag=true; for(int i=a;i<n.length();i=i+a){ if(!n.substring(i,i+a).contains(n.substring(0,a))){
System.out.println("false");
flag=false; break;
}
} if(flag){
System.out.println("最长的字符串为"+n.substring(0,a));
}
}
}
}
} importjava.util.Scanner;public class Main {public static void main(String[] args){Scanner sc = new Scanner(System.in);String str = sc.nextLine();int i = str.length() / 2; //最长也不过是原字符串长度的一半for(; i >= 0; i--){String sub = str.substring(0,i);//每次截取前i个字符串if(str.replaceAll(sub,"").length()==0){//利用正则表达式,替换原字符串的内容,如果最后为空,说明可以被完全替换,所以是最长字串System.out.println(sub);return;}}System.out.println(false);}}
#include<bits/stdc++.h>
using namespace std;
int main(){
string str;
cin>>str;
int len = str.size()/2;
for(;len>0;len--){
string temp = str.substr(0,len);
string tempAll = str;
while(tempAll.find(temp)==0){
tempAll.erase(0,len);
}
if(tempAll.size()==0){
cout<<temp<<endl;
return 0;
}
}
cout<<"false"<<endl;
return 0;
}
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
String result = "";
String[] allResult = new String[s.length()];
int count = 0;
for(int i=0;i<s.length()/2;i++){
if(isSubString(s,s.substring(0,i+1))){
allResult[count] = s.substring(0,i+1);
count ++;
}
}
if(allResult[0]!=null){
System.out.print(allResult[0]);
}else{
System.out.print(false);
}
}
public static boolean isSubString(String s,String subStr){
if((subStr+s).equals(s+subStr)){
return true;
}
return false;
}
} import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String s = sc.nextLine();
int len = s.length();
StringBuilder sb = new StringBuilder();
sb.append(s.charAt(0));
boolean isSubstring = true;
int findCnt = 0;
for (int i = 1; i <= len / 2; i++) {
if (s.charAt(i) == sb.charAt(0)) {
int cnt = 1;
while (cnt != sb.length()) {
if (s.charAt(cnt) != s.charAt(cnt)) {
break;
}
cnt++;
}
if (cnt == sb.length()) {//是子串
for (int j = i; j < len; j++) {
if (s.charAt(j) != sb.charAt(j % sb.length())) {
isSubstring = false;
break;
}
}
break;
} else {
sb.append(s.charAt(i));
}
} else {
sb.append(s.charAt(i));
}
findCnt++;
}
if (isSubstring && findCnt != len / 2) {
System.out.println(sb.toString());
} else {
System.out.println("false");
}
}
} import java.util.Scanner;
/**
* 给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
* 例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件。
*/
public class Main {
/**
* 思路:等分
* @param str
* @return
*/
public static String duplicate (String str){
//初始化等分份数
int subNum = 2;
int len = str.length();
while (len / subNum > 0){
if (len % subNum != 0){
subNum++;
continue;
}else {
StringBuilder sb = new StringBuilder();
for (int i = 0; i < subNum; i++) {
sb.append(str.substring(0, len / subNum));
}
if (str.equals(sb.toString())){
return str.substring(0 , len / subNum );
}
subNum++;
}
}
return "false";
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String s = scanner.nextLine();
String duplicate = duplicate(s);
System.out.println(duplicate);
}
} import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner read=new Scanner(System.in);
String s=read.next(); read.close();
if(s.length()<2){
System.out.println(s);
return ;
}
//时间复杂度O(n),可匹配正则字符
int begin=0,end=0,cur=1; //begin/end记录当前子串起始终止位置,cur记录当前考察的原字符串下标
while(cur<s.length()) {
int temp=begin;
while(s.charAt(cur)==s.charAt(temp)) {
if(temp==end) { //如果考察到子串最后一个,即比如a(begin)bc(end)abc(cur)abc
begin=end+1; //改变begin/end/cur的值为: abca(begin)bc(end)a(cur)bc
end=cur;
temp=begin-1;
}cur++;temp++;
if(cur==s.length()) {//如果cur变成了最后一个, 当begin==0,输出false,否则输出子串
if(begin==0)break;
//System.out.println(s.substring(begin)); //最短匹配
//尽管题目要求输出最长匹配,这个题的测试用例输出最短也会通过
int len=end-begin+1,m=2;
while(!(s.length()%m==0&&s.length()/m%len==0)) m++;
int time=s.length()/m/len;
while(time-->0)
System.out.print(s.substring(begin)); //最长匹配
System.out.println();
return ;
}
}
begin=0;
end=cur++;
}System.out.println("false");
}
}