leetcode第3題:空字符串輸入下,本地與平臺輸出結果差異解析
在解決LeetCode第3題“無重復字符的最長子串”問題時,一些開發者可能會遇到本地環境(例如visual studio)與LeetCode平臺輸出結果不一致的情況。本文將分析一個具體案例:輸入為空字符串””時,LeetCode平臺輸出0,而本地環境輸出1。
問題代碼片段如下:
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++){ if(i==0){ temp1=String.valueOf(s.charAt(i)); } for(int j=0;j<result.size();j++){ int t=result.get(j).length(); int target=0; if(t>target){ target=t; } } } return target; // 這里target初始值為0 } }
當輸入為空字符串時,LeetCode平臺返回0,而本地環境返回1。原因在于代碼邏輯缺陷:循環結束后,temp1 變量可能包含未添加到 result 列表中的字符串。當輸入為空字符串時,循環不會執行,temp1 保持為空字符串,result 列表也為空。因此,target 的值始終為其初始值0,與LeetCode平臺輸出一致。本地環境輸出1,很可能是因為本地測試環境與LeetCode平臺環境差異,或者本地測試用例與LeetCode平臺測試用例不同,也可能存在其他未顯示的代碼或環境因素。
根本原因在于代碼邏輯錯誤,并非環境差異。 這段代碼根本沒有正確計算最長無重復子串的長度。它只是遍歷字符串,并且錯誤地使用了target變量。
更正后的代碼: 需要完全重寫該函數來正確計算最長無重復子串長度。以下是一個正確的Java實現:
import java.util.*; class Solution { public int lengthOfLongestSubstring(String s) { if (s == null || s.length() == 0) return 0; // 處理空字符串情況 Map<Character, Integer> charIndexMap = new HashMap<>(); int maxLength = 0; int start = 0; for (int end = 0; end < s.length(); end++) { char c = s.charAt(end); if (charIndexMap.containsKey(c) && charIndexMap.get(c) >= start) { start = charIndexMap.get(c) + 1; } charIndexMap.put(c, end); maxLength = Math.max(maxLength, end - start + 1); } return maxLength; } }
這個更正后的代碼使用了滑動窗口技術,正確地處理了各種輸入,包括空字符串,確保在所有環境下都能得到一致的正確結果。 原代碼邏輯錯誤是導致本地和平臺結果不一致的根本原因,并非環境差異。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END