題目描述
給出一個非空的字符串,判斷這個字符串是否是由它的一個子串進行多次首尾拼接構成的。
例如,"abcabcabc"滿足條件,因爲它是由"abc"首尾拼接而成的,而"abcab"則不滿足條件。
輸入描述:
非空字符串
輸出描述:
如果字符串滿足上述條件,則輸出最長的滿足條件的的子串;如果不滿足條件,則輸出false。
輸入例子1:
abcabc
輸出例子1:
abc
思路
首先,子串的長度必須能字符串整除,否則不滿足拼接;其次,要求輸出最長的字串,所以我們需要逆序遍歷;然後,因爲子串的長度肯定是小於等於字符串長度的一半的,所以我們可以從字符串的中段開始逆序遍歷。
代碼
import java.util.Scanner;
public class Main{
public static void main(String[] args){
//讀取輸入
Scanner in = new Scanner(System.in);
String list = in.next();
int len = list.length();
int end = len >> 1;//從字符轉list的中段逆序遍歷
for(;end>0;end--){
//子串的長度必須能被原字符串的長度整除
if(len%end == 0){
int i=0;
for(;i<len && list.charAt(i%end) == list.charAt(i);i++){}
//如果成功遍歷到最後,說明已經找到了符合條件的字符串
if(i == len) break;
}
}
//end大於0,說明找到了
if(end>0)
System.out.println(list.substring(0,end));
else
//未找到
System.out.println("false");
}
}