【问题标题】:Merge two strings with common starting and ending substrings合并两个具有公共起始和结束子字符串的字符串
【发布时间】:2012-03-03 13:05:51
【问题描述】:

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

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;
}

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

【问题讨论】:

  • 检查Java的答案,如果您有任何问题,请告诉我...

标签: string algorithm substring


【解决方案1】:

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

std::string concat(std::string const &left, std::string const &right)
{
    size_t n = left.length();
    for (size_t i=0; i<n; i++)
        if (std::strncmp(left.c_str() + i, right.c_str(), n - i) == 0)
            return left + (right.c_str() + n - i);

    return left + right;
}

【讨论】:

    【解决方案2】:

    Try below... 经过测试,它可以在 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);
        }
    }
    

    注意

    如果你想让它们小写然后比较,那么使用.toLowerCase()

    更新 1

    我的输出是

    common is String
    Final String of OneString & StringTwo is OneStringTwo
    

    我相信这就是你想要的......

    更新 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);
        }
    }
    

    【讨论】:

      【解决方案3】:

      试试这个,对我有用

      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,""); 
      }
      

      【讨论】:

        猜你喜欢
        • 2023-03-29
        • 2023-03-27
        • 1970-01-01
        • 1970-01-01
        • 2014-12-29
        • 2010-11-04
        • 2016-04-20
        • 2013-09-13
        相关资源
        最近更新 更多