-1

2 つの文字列の最長共通サブ シーケンスを実装しようとしています。私の方法は、ここに投稿されたものとは少し異なります。私は解決策に近づいていますが、ほとんど問題はありません。私を助けてください。

私の問題: 望ましい出力: メタリカ 現在の出力: etallica

私のコードは次のとおりです。

import java.util.ArrayList;
import java.util.Stack;

public class CommonSubS  {

public static void main(String[] args) {

   ArrayList<Character> ss = new ArrayList<>();
   String s1 = "metallicarules";
   String s2 = "rulmetallicales";
   ArrayList<ArrayList<Character>> one = new ArrayList<>();
   char[] first = s1.toCharArray();
   char[] second = s2.toCharArray();
   int j = 0;
   int current = 0;
   int mainIndex = 0;
   ArrayList<Character> sec = new ArrayList<>();

   // search for each char in second            
   for(int i = 0; i<second.length; i++)
   {    
       j = current;
       // search for each char in first
       while(j<first.length)
       {
           // if match found, add to the arraylist
           if(first[j] == second[i]){

               sec.add(first[j]);
               current = j+1;
               break;
           }
           else 
           {   // if different char occured in between,
               // save current arraylist in one
               // and go forward
               one.add(sec);
               sec = new ArrayList<>();
               j++; 
               current = 0;        
           }

       }
   }

   for(ArrayList<Character> s: one)
   {
       for(Character c: s)
       {
           System.out.print(c);
       }
       System.out.println();    
    }

  }
}

/*
 desired output: metallica
current output: etallica
*/

他の方法があることは知っていますが、簡単な方法を使用して実装しようとしました。問題点を指摘してください。

4

2 に答える 2

0

問題は、iがインクリメントされ、2番目の単語のメタリカからのmを最初の単語の最後のeと比較することだと思います。したがって、次の反復では、(2番目の単語の)eである次の文字から開始します。 、それが最初にmを取得していない理由です。たぶん、共通のサブシーケンスを終了するたびにi=i-1を使用するとします。

于 2013-03-19T04:41:01.213 に答える