2017-10-14 6 views
0

この質問はすでに正しい答えがあることは知っていますが、なぜ自分のコードが機能しないのかを見つけようとしています。文字を繰り返さないで最長のサブストリング - Java

問題:文字列を指定すると、文字を繰り返さずに最も長い部分文字列の長さを見つけます。 「abcabcbb」を考えると、答えは長さが私のコードが出力に時間がかかりすぎる3である「ABC」であり、それは出力1

マイコード:

public class problemOne { 

    static int lengthOfLongestSubstring(String s) { 
     int count, longest = 1; 

     for (int x = 0; x < s.length(); x++) { 
      count = 1; 
      for (int y = x + 1; y < s.length(); y++) { 
       if (x != y) { 
        count++; 
       } else { 
        longest = Math.max(longest, count); 
        break; 
       } 
      } 
     } 
     return longest; 

    } 

    public static void main(String[] args) { 
     String str = "abcabcbb"; 
     System.out.println(lengthOfLongestSubstring(str)); 
    } 
} 

ありがとうございます!

+0

ヒント:あなたのループでは、実際に*文字*を見ています。その長さを見つけるのに 's'を使っているだけです。あなたが 'y = x + 1'で始まり、' y'を増やしている場合、 'if(x!= y)'がfalseであるといつ期待しますか? –

+0

次のヒント:今すぐデバッグについて学ぶのに良い時間です。比較的シンプルなプログラムを持っているので、デバッグすれば、期待通りに動作していない場所を確認することができます。 –

+0

@JonSkeet私は数分間違ったものを見つけようとしていましたが、それを見ることができませんでした。そのために、.charAt()で修正しました。今、私は実際に自分のコードが混乱していて、それを修正しても正しく動作しないことを知っていました。 – hallobastion

答えて

0

内側ループには、if (x != y)があります。私はここでは数字ではなく文字を比較することを意図していたと思います。

そして、どのように内部ループが以前にどの文字が処理されたかを「知っていますか? Maybee内部のループは、現在処理されている文字と現在の文字を比較するためのものですか?しかし、代わりに数字を比較します。

+0

あなたは質問のポイントを見逃しました。 OPは、現在のコードで何が間違っていたのかを知りたがっていた。 –

+0

@JonSkeet OK(確かに)。回答が更新されました。 – thanopi57

関連する問題