题目描述
给出一个非空的字符串,判断这个字符串是否是由它的一个子串进行多次首尾拼接构成的。
例如,"abcabcabc"满足条件,因为它是由"abc"首尾拼接而成的,而"abcab"则不满足条件,输出false。
输入描述:
abcabc
输出描述:
abc
Java代码实现如下
import java.util.Scanner;
public class Main
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
//最长子字符串最大为其一半
for(int i=1; i<=(str.length()/2); i++)
{
//每次截取前i个字符串
String is_sub_str = str.substring(0,i);
//利用正则表达式,替换原字符串的内容,如果最后为空,则可以被完全替换,所以是最长字串
String temp = str.replaceAll(is_sub_str, "");
if(temp.length() == 0)
{
System.out.println(is_sub_str);
return;
}
}
System.out.println(false);
}
}
复习一下字符串常用的方法
char | charAt(int index) 返回指定索引处的 char 值。 |
boolean | equals(Object anObject) 将此字符串与指定的对象比较。 |
int | indexOf(String str) 返回指定子字符串在此字符串中第一次出现处的索引。 |
int | length() 返回此字符串的长度。 |
String | replace(CharSequence target, CharSequence replacement) 使用指定的字面值替换序列替换此字符串所有匹配字面值目标序列的子字符串。 |
String | replaceAll(String regex, String replacement) 使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。 |
String[] | split(String regex) 根据给定正则表达式的匹配拆分此字符串。 |
char[] | toCharArray() 将此字符串转换为一个新的字符数组。 |
String | substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串。 |
String | toString() 返回此对象本身(它已经是一个字符串!)。 |