この質問はすでに正しい答えがあることは知っていますが、なぜ自分のコードが機能しないのかを見つけようとしています。文字を繰り返さないで最長のサブストリング - 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));
}
}
ありがとうございます!
ヒント:あなたのループでは、実際に*文字*を見ています。その長さを見つけるのに 's'を使っているだけです。あなたが 'y = x + 1'で始まり、' y'を増やしている場合、 'if(x!= y)'がfalseであるといつ期待しますか? –
次のヒント:今すぐデバッグについて学ぶのに良い時間です。比較的シンプルなプログラムを持っているので、デバッグすれば、期待通りに動作していない場所を確認することができます。 –
@JonSkeet私は数分間違ったものを見つけようとしていましたが、それを見ることができませんでした。そのために、.charAt()で修正しました。今、私は実際に自分のコードが混乱していて、それを修正しても正しく動作しないことを知っていました。 – hallobastion