繰り返すことなく、文字の最長の文字列の部分文字列を検索

現在のサブ文字列を設定:tempString

リスト:繰り返しのない保持部分文字列の配列を設定します

アイデア:

最初の文字の先頭から判断すると、

現在のストリングは、現在の文字が含まれていない場合は、現在のサブストリングが、現在の文字が新しい現在の部分文字列となり参加します

現在の文字位置における現在の文字を含むストリング電流は二つの文字列に文字列の位置に応じて、現在の文字列で判定された場合、現在の文字が新しい現在のサブストリングに追加された場合後端は、現在のサブ決定しましたリストとサブストリングの長さの文字列配列は、現在のサブストリングの長さ、空のリストならば、現在のサブストリングを加え、等しい場合、現在のサブリストに直接追加。

ストリングの最終的なリストは、最長の部分文字列であります

パブリック静的ボイドlongestNodupSubstring(文字列){
  IF(ヌル==文字列|| String.lengthです()== 0){
   リターン。
  }
  リストの<string>リスト=新規のArrayList <ストリング>();
  文字列tempString = "";
  用(INT iは= 0; I <String.lengthです(); I ++){
   IF(tempString.indexOf(string.charAt(I))== -1){
    tempString + = string.charAt(I)。
   }他{
    INT J = tempString.indexOf(string.charAt(I))。
    tempString = tempString.substring(J + 1)+ string.charAt(I)。
   }
   IF(はlist.size()== 0){
    list.add(tempString)。
   }他{
    IF(tempString.length()> list.get(0).LENGTH()){
     list.clear()。
     list.add(tempString)。
    }他{
     IF(tempString.length()== list.get(0).LENGTH()){
      list.add(tempString)。
     }
    }
   }
  }
  のために(INT iは= 0; I <はlist.size(); I ++){
   System.out.printlnは(list.get(I))。
  }
 }

 パブリック静的無効メイン(文字列[] args){
  longestNodupSubstring1( "ABCABCABC")。
 }

公開された34元の記事 ウォンの賞賛2 ビュー40000 +

おすすめ

転載: blog.csdn.net/zjj2006/article/details/42744781