比较java中的字符串并删除它们相同的字符串部分

我和我有两个字符串:

s1="MICROSOFT" s2="APPLESOFT" 

我需要比较字符串并从第二个字符串中删除重复部分(总是朝向末尾)。 所以我应该把“MICROSOFT”和“APPLE”作为输出。

我已逐字符地比较了两个字符串。

  String s1 = "MICROSOFT"; String s2 = "APPLESOFT"; for(int j=0; j<s1.length(); j++) { char c1 = s1.charAt(j); char c2 = s2.charAt(j); if(c1==c2) System.out.println("Match found!!!"); else System.out.println("No match found!"); } 

它应检查字符串,如果两个字符串在字符串结尾之前具有相同的字符,那么我需要从第二个字符串中删除该冗余部分,在这种情况下为SOFT。 但我想不出如何从这里开始。

可能会有更多重复……但我们只能删除那些不断相同的重复项。 如果我有APPWWSOFT和APPLESOFT,我应该在第二个字符串中再次获得APPLE,因为我们得到的LE与WW之间不同

你能帮帮我吗?

搜索并阅读有关最长公共子序列的信息,您可以找到有效的算法来找出两个输入字符串的LCS。 找到输入字符串的LCS后,很容易操作输入。 例如,在您的情况下,LCS算法将找到“SOFT”作为这两个字符串的LCS,那么您可以检查LCS是否在第二个输入的最后部分,然后轻松删除它。 我希望这个想法有所帮助。

Java中的示例LCS代码在这里,请尝试: http : //introcs.cs.princeton.edu/java/96optimization/LCS.java.html

示例场景(伪代码):

 input1: "MISROSOFT"; input2: "APPLESOFT"; execute LCS(input1, input2); store the result in lcs, now lcs = "SOFT"; iterate over the characters of input2, if a character exists in lcs then remove it from input2. 

据我所知,你想从两个字符串中删除任何相同的字符。 相同的意思是:相同的位置和相同的字符(代码)。 我认为以下线性复杂性解决方案是最简单的:

  StringBuilder sb1 = new StringBuilder(); StringBuilder sb2 = new StringBuilder(); //if you want to remove the identical char //only from one string you don't need the 2nd sb char c; for(int i = 0; i 

试试这个算法 – 创建你的第一个字符串的字符序列,并在第二个字符串中找到它。

表现 –
平均情况=(s1.length() – 1)平方

 public class SeqFind { public static String searchReplace(String s1,String s2) { String s3; boolean brk=false; for(int j=s1.length();j>0&&!brk;j--){ for (int i = j-4; i > 0; i--) { String string = s1.substring( i,j); if(s2.contains(string)){ System.out.println(s2+" - "+string+" "+s2.replace( string,"")); brk=true; break; } } } return s3; } public static void main(String[] args) { String s1 = "MICROSOFT"; String s2 = "APPLESOFT"; String s3 = searchReplace(s1,s2); } } 

输出 – APPLESOFT – SOFT – APPLE

  public class Match { public static void main(String[] args) { String s1="MICROSOFT"; String s2="APPLESOFT"; String[] s=new String[10]; String s3; int j=0,k=0; for(int i=s2.length();i>0;i--) { s[j]=s2.substring(k,s2.length()); if(s1.contains(s[j])) { s3=s2.substring(0,j); System.out.println(s1+""+s3); System.exit(0); } else { System.out.println(""); } j++; k++; } } } 

我编辑了代码,你可以再试一次。

试试这个,没试过你

  String s1 = "MICROSOFT"; String s2 = "APPLESOFT"; String s3=""; for(int j=0; j 

如果希望修改String ,则应该使用StringBuffer

在这种情况下,你可以有一个额外的StringBuffer ,你可以继续添加不匹配的字符: –

  StringBuffer s1 = new StringBuffer("MICROSOFT"); StringBuffer s2 = new StringBuffer("APPLESOFT"); StringBuffer s3 = new StringBuffer(); for(int j=0; j 

我绞尽脑汁后解决了我的问题。 请随时纠正/改进/优化我的代码。 该代码不仅适用于“MICROSOFT”和“APPLESOFT”输入,还适用于“APPWWSOFT”和“APPLESOFT”之类的输入(我需要从上面的两个输入中删除连续的重复项 – SOFT)。 我正处于学习阶段,我会感激任何有价值的投入。

 public class test { public static void main(String[] args) { String s1 = "MICROSOFT"; String s2 = "APPLESOFT"; int counter1=0; int counter2=0; String[] test = new String[100]; test[0]=""; for(int j=0; j