String 如何查找字符串S是否包含在由插入到S中任何位置(仅一次)的S组成的字符串中

String 如何查找字符串S是否包含在由插入到S中任何位置(仅一次)的S组成的字符串中,string,algorithm,String,Algorithm,作为第一个检查,由于必须通过将字符串插入自身来进行有效输入,因此其大小必须是字符串S的两倍 例如,如果S=abc,则ababca或aabcbc应为输入返回True,但为输入返回False,如abcab、abcxa、ABCABC 我已经尝试过一种简单的方法来检查子字符串,如果它存在的话,那么就删掉该部分,然后检查剩余的字符串是否与S匹配。但是对于某些类型的输入,这种方法是失败的 private static void printResult(String s, String p){ int

作为第一个检查,由于必须通过将字符串插入自身来进行有效输入,因此其大小必须是字符串S的两倍

例如,如果S=abc,则ababca或aabcbc应为输入返回True,但为输入返回False,如abcab、abcxa、ABCABC

我已经尝试过一种简单的方法来检查子字符串,如果它存在的话,那么就删掉该部分,然后检查剩余的字符串是否与S匹配。但是对于某些类型的输入,这种方法是失败的

private static void printResult(String s, String p){
    int x = p.indexOf(s);

    if(x<0){
        System.out.println("False");
        return;
    }
    String s1="";
    if(p.length()>=s.length()*2){
        s1 = p.substring(0,x)+p.substring(x+s.length());
        if(s1.equals(s)){
            System.out.println("True");
        }
        else{
            System.out.println("False");
        }
        return;
    }
    System.out.println("False");
}
private静态void打印结果(字符串s、字符串p){
int x=p.indexOf(s);
如果(x=s.长度()*2){
s1=p.substring(0,x)+p.substring(x+s.length());
如果(s1等于(s)){
System.out.println(“真”);
}
否则{
System.out.println(“假”);
}
返回;
}
System.out.println(“假”);
}

在某些情况下,查看第一次出现的
s
可能不合适

假设您的原始单词是
w=xyx
(对于
x
y
一些单词),那么您可以将
w
插入到自身中以生成
xyxx
(大写表示插入)。现在您可以看到,如果您尝试查找
xyx
,您的算法将在第一个位置找到它,然后生成
yxx
,作为剩余部分


因此,在结束之前,您需要查看所有可能的位置。

查看第一次出现的
s
在某些情况下可能不合适

假设您的原始单词是
w=xyx
(对于
x
y
一些单词),那么您可以将
w
插入到自身中以生成
xyxx
(大写表示插入)。现在您可以看到,如果您尝试查找
xyx
,您的算法将在第一个位置找到它,然后生成
yxx
,作为剩余部分


因此,在结束之前,您需要查看每个可能的位置。

哪些输入失败?向我们展示代码和示例。添加了试用代码,哪些输入失败?向我们展示代码和示例。添加了试用代码