leetcode第3題:空字符串輸入下,本地與平臺(tái)輸出結(jié)果差異解析
在解決LeetCode第3題“無重復(fù)字符的最長子串”問題時(shí),一些開發(fā)者可能會(huì)遇到本地環(huán)境(例如visual studio)與LeetCode平臺(tái)輸出結(jié)果不一致的情況。本文將分析一個(gè)具體案例:輸入為空字符串””時(shí),LeetCode平臺(tái)輸出0,而本地環(huán)境輸出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 } }
當(dāng)輸入為空字符串時(shí),LeetCode平臺(tái)返回0,而本地環(huán)境返回1。原因在于代碼邏輯缺陷:循環(huán)結(jié)束后,temp1 變量可能包含未添加到 result 列表中的字符串。當(dāng)輸入為空字符串時(shí),循環(huán)不會(huì)執(zhí)行,temp1 保持為空字符串,result 列表也為空。因此,target 的值始終為其初始值0,與LeetCode平臺(tái)輸出一致。本地環(huán)境輸出1,很可能是因?yàn)楸镜販y(cè)試環(huán)境與LeetCode平臺(tái)環(huán)境差異,或者本地測(cè)試用例與LeetCode平臺(tái)測(cè)試用例不同,也可能存在其他未顯示的代碼或環(huán)境因素。
根本原因在于代碼邏輯錯(cuò)誤,并非環(huán)境差異。 這段代碼根本沒有正確計(jì)算最長無重復(fù)子串的長度。它只是遍歷字符串,并且錯(cuò)誤地使用了target變量。
更正后的代碼: 需要完全重寫該函數(shù)來正確計(jì)算最長無重復(fù)子串長度。以下是一個(gè)正確的Java實(shí)現(xiàn):
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; } }
這個(gè)更正后的代碼使用了滑動(dòng)窗口技術(shù),正確地處理了各種輸入,包括空字符串,確保在所有環(huán)境下都能得到一致的正確結(jié)果。 原代碼邏輯錯(cuò)誤是導(dǎo)致本地和平臺(tái)結(jié)果不一致的根本原因,并非環(huán)境差異。