Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 合并两个具有公共起始和结束子字符串的字符串_String_Algorithm_Substring - Fatal编程技术网

String 合并两个具有公共起始和结束子字符串的字符串

String 合并两个具有公共起始和结束子字符串的字符串,string,algorithm,substring,String,Algorithm,Substring,我有两个字符串,第一个的结束子字符串是第二个的开始子字符串,例如 string left : ONESTRING string right : STRINGTWO 我必须合并它们,以便生成的字符串 result string : ONESTRINGTWO 公共子串的长度事先未知。 如果起始字符串和结束字符串不常见,则需要返回字符串的串联 这就是我目前正在做的事情 for(int i = 1;i< left.length();i++) { //substring of l

我有两个字符串,第一个的结束子字符串是第二个的开始子字符串,例如

string left : ONESTRING
string right : STRINGTWO
我必须合并它们,以便生成的字符串

result string : ONESTRINGTWO
公共子串的长度事先未知。 如果起始字符串和结束字符串不常见,则需要返回字符串的串联

这就是我目前正在做的事情

for(int i = 1;i< left.length();i++) {
        //substring of length "i" from last of left string
        string temp = left.substr(left.length() -1 -i,i);
        if(temp.length() < right.length()) {
            //check if the right string starts with the above substring 
            if (strncmp(right.c_str(), temp.c_str(), strlen(temp.c_str())) == 0 ) {
                // common substring found, save this result 
                found =  true;
                result = left.substr(0,left.length()-i-1) + right;
            }

        }
    }

if(found == true) {
    return result;
} else {
    return left + right;
}
for(int i=1;i

我会感谢任何指向更简单实现(任何语言)的指针。

通过巧妙地使用指针算法,您可以跳过对
substr
(进行分配)和
strlen
(在字符串长度上花费O(n)时间)的调用

std::string concat(std::string const&left,std::string const&right)
{
size_t n=left.length();

对于(size_t i=0;i请尝试以下内容…已测试,并在JAVA中运行

public class FindString {
    public static void main(String[] args) {
    String myString01 = "OneString";
    String myString02 = "StringTwo";

    String commonString = "";
    for (int i = 0; i < myString01.length(); i++) {
        if (myString02.indexOf(myString01.substring(i)) >= 0) {
        commonString = myString01.substring(i);
        break;
        }
    }

    System.out.println("common is " + commonString);

    String firstPart = myString01.substring(0, myString01.indexOf(commonString));
    String secondPart = myString02.substring(myString02.indexOf(commonString) + commonString.length());
    String finalString = firstPart + commonString + secondPart;

    System.out.println("Final String of " + myString01 + " & " + myString02 + " is " + finalString);
    }
}
我相信这就是你想要的

更新2 下面是一些先进的技术

public class FindString {
    public static void main(String[] args) {
    String myString01 = "StringOne";
    String myString02 = "TwoString";

//        String myString01 = "StringOne";
//        String myString02 = "StringTwo";


//        String myString01 = "OneString";
//        String myString02 = "TwoString";

//        String myString01 = "OneString";
//        String myString02 = "StringTwo";

    System.out.println("First String is  = " + myString01);
    System.out.println("Second String is = " + myString02);

    String commonString = "";
    for (int i = 0; i < myString01.length(); i++) {
        if (myString02.indexOf(myString01.substring(i)) >= 0) {
        commonString = myString01.substring(i);
        break;
        }
    }

    if (commonString.isEmpty()) {
        for (int i = 0; i < myString02.length(); i++) {
        if (myString01.indexOf(myString02.substring(i)) >= 0) {
            commonString = myString02.substring(i);
            break;
        }
        }

    }

    String firstPart;

    if (myString01.indexOf(commonString) > 0) {
        firstPart = myString01.substring(0, myString01.indexOf(commonString));
    } else {
        firstPart = myString01.substring(myString01.indexOf(commonString) + commonString.length());
    }

    String secondPart;

    if (myString02.indexOf(commonString) > 0) {
        secondPart = myString02.substring(0, myString02.indexOf(commonString));
    } else {
        secondPart = myString02.substring(myString02.indexOf(commonString) + commonString.length());
    }

    System.out.println("First Part  = " + firstPart);
    System.out.println("Second Part = " + secondPart);
    System.out.println("Common Part = " + commonString);

    String finalString = firstPart + commonString + secondPart;

    System.out.println("Final String of " + myString01 + " & " + myString02 + " is " + finalString);
    }
}
公共类查找字符串{
公共静态void main(字符串[]args){
字符串myString01=“StringOne”;
字符串myString02=“TwoString”;
//字符串myString01=“StringOne”;
//字符串myString02=“StringTwo”;
//字符串myString01=“OneString”;
//字符串myString02=“TwoString”;
//字符串myString01=“OneString”;
//字符串myString02=“StringTwo”;
System.out.println(“第一个字符串是=“+myString01”);
System.out.println(“第二个字符串是=“+myString02”);
字符串commonString=“”;
对于(int i=0;i=0){
commonString=myString01.子字符串(i);
打破
}
}
if(commonString.isEmpty()){
对于(int i=0;i=0){
commonString=myString02.子字符串(i);
打破
}
}
}
第一部分;
如果(myString01.indexOf(commonString)>0){
firstPart=myString01.substring(0,myString01.indexOf(commonString));
}否则{
firstPart=myString01.substring(myString01.indexOf(commonString)+commonString.length());
}
第二部分;
如果(myString02.indexOf(commonString)>0){
secondPart=myString02.substring(0,myString02.indexOf(commonString));
}否则{
secondPart=myString02.substring(myString02.indexOf(commonString)+commonString.length());
}
System.out.println(“第一部分=”+第一部分);
System.out.println(“第二部分=”+第二部分);
System.out.println(“公共部分=“+commonString”);
字符串finalString=firstPart+commonString+secondPart;
System.out.println(““+myString01+”和“+myString02+”的最后一个字符串是“+finalString”);
}
}

试试这个,它对我有用

public Void FindString (string left ,string right)
{
int i=0;
string result = string.Empty;

for( i = right.Length ; i>=0;i--)
{
   if(left.Contains(right.Substring(0,i)))
   {
     break;
   }
}

if(i<right.Length)
{
    result =right.Substring(0,i);
}
return  left.Replace(result,"") + result +right.Replace(result,""); 
}
public Void FindString(左字符串、右字符串)
{
int i=0;
字符串结果=string.Empty;
对于(i=right.Length;i>=0;i--)
{
if(left.Contains(right.Substring(0,i)))
{
打破
}
}

如果(i)检查
Java
的答案,如果您有任何问题,请告诉我。。。
public class FindString {
    public static void main(String[] args) {
    String myString01 = "StringOne";
    String myString02 = "TwoString";

//        String myString01 = "StringOne";
//        String myString02 = "StringTwo";


//        String myString01 = "OneString";
//        String myString02 = "TwoString";

//        String myString01 = "OneString";
//        String myString02 = "StringTwo";

    System.out.println("First String is  = " + myString01);
    System.out.println("Second String is = " + myString02);

    String commonString = "";
    for (int i = 0; i < myString01.length(); i++) {
        if (myString02.indexOf(myString01.substring(i)) >= 0) {
        commonString = myString01.substring(i);
        break;
        }
    }

    if (commonString.isEmpty()) {
        for (int i = 0; i < myString02.length(); i++) {
        if (myString01.indexOf(myString02.substring(i)) >= 0) {
            commonString = myString02.substring(i);
            break;
        }
        }

    }

    String firstPart;

    if (myString01.indexOf(commonString) > 0) {
        firstPart = myString01.substring(0, myString01.indexOf(commonString));
    } else {
        firstPart = myString01.substring(myString01.indexOf(commonString) + commonString.length());
    }

    String secondPart;

    if (myString02.indexOf(commonString) > 0) {
        secondPart = myString02.substring(0, myString02.indexOf(commonString));
    } else {
        secondPart = myString02.substring(myString02.indexOf(commonString) + commonString.length());
    }

    System.out.println("First Part  = " + firstPart);
    System.out.println("Second Part = " + secondPart);
    System.out.println("Common Part = " + commonString);

    String finalString = firstPart + commonString + secondPart;

    System.out.println("Final String of " + myString01 + " & " + myString02 + " is " + finalString);
    }
}
public Void FindString (string left ,string right)
{
int i=0;
string result = string.Empty;

for( i = right.Length ; i>=0;i--)
{
   if(left.Contains(right.Substring(0,i)))
   {
     break;
   }
}

if(i<right.Length)
{
    result =right.Substring(0,i);
}
return  left.Replace(result,"") + result +right.Replace(result,""); 
}