leetcode第3題:無重復字符最長子串——本地與平臺輸出差異解析
本文分析LeetCode第3題“無重復字符的最長子串”中,用戶代碼在本地環境和LeetCode平臺輸出結果不同的問題。題目要求找出字符串中最長無重復字符子串的長度。
用戶提交的Java代碼如下(已修正代碼格式):
import java.util.*; class Solution { public int lengthOfLongestSubstring(String s) { String temp1 = ""; ArrayList<String> result = new ArrayList<String>(); for (int i = 0; i < s.length(); i++) { boolean repeated = false; for (int j = 0; j < temp1.length(); j++) { if (temp1.charAt(j) == s.charAt(i)) { repeated = true; break; } } if (repeated) { result.add(temp1); temp1 = String.valueOf(s.charAt(i)); } else { temp1 += String.valueOf(s.charAt(i)); } } result.add(temp1); // 關鍵修正:添加最后一段子串 int target = 0; for (int j = 0; j < result.size(); j++) { int t = result.get(j).length(); if (t > target) { target = t; } } return target; } }
代碼邏輯:遍歷字符串,temp1 存儲當前無重復字符子串。遇到重復字符,將 temp1 加入 result 列表,并重置 temp1。最后,遍歷 result 找出最長子串長度。
問題根源:代碼在循環結束后,未將 temp1 中的剩余子串添加到 result 列表。當輸入為單個空格 ” ” 時,循環結束后 temp1 為 ” “,但未被加入 result,導致 result 為空,輸出 0。
解決方案:在循環結束后添加 result.add(temp1);,確保所有子串都被納入計算。
本地環境輸出 1 的原因可能與運行環境或測試方法有關,但代碼本身的邏輯缺陷是導致LeetCode平臺與本地環境結果不一致的主要原因。 修正后的代碼解決了這個問題,無論輸入為何,都能得到正確結果。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END