字符串是否可由子串拼接[java]

題目描述

給出一個非空的字符串,判斷這個字符串是否是由它的一個子串進行多次首尾拼接構成的。
例如,"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");
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章