文字列がサブストリングループから得られるかどうか-java


タイトル
空でない文字列を与えて、この文字列がそのサブ列によって複数回の首尾接合で構成されているかどうかを判断します.条件を満たす最長子列を出力し、そうでなければfalseを出力します.例えば、「abcabcabc」は「abc」の先頭と末尾をつなぎ合わせたものであるため、「abc」を出力し、「abcab」は条件を満たさない場合、「false」を出力する.
構想
サブストリングは最長文字列の半分にすぎず、substring()を用いてサブストリングを切り取り、末尾をループして削除し、replaceAll()と正規表現でサブストリングがループして文字列を得ることができるかどうかを判断する.
インテリジェントポイント
  • public String substring(int beginIndex, int endIndex):文字列のサブ文字列を返します.2番目のパラメータはオプションで、2つのパラメータはそれぞれ開始ビットと末尾ビットを表します.
  • public String replaceAll(String regex, String replacement):指定されたパラメータreplacementを使用して、指定された正規表現に一致するすべてのサブ文字列を置換します.最初のパラメータは、この文字列に一致する正規表現を表します.2番目のパラメータは、各一致するアイテムを置き換える文字列を表します.成功すると置換された文字列が返され、失敗すると元の文字列が返されます.
  • import java.util.Scanner;
    
    public class Main {
     
        public static void main(String[] args){
     
            Scanner sc = new Scanner(System.in); 
     
            String str = sc.nextLine(); //          ,      while       。
            //       while,   :  has xxxx  ,     next xxxx。     hasNextLine,       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);
     
        }
     
    }