LeetCode第3題:本地與平臺運行結果不一致,問題出在哪里?

leetcode第3題:本地與平臺運行結果不一致,問題排查

在LeetCode第3題“無重復字符的最長子串”中,許多開發者遇到本地visual studio運行結果與平臺結果不符的情況。本文分析一個具體案例,解釋這種差異的成因。

LeetCode第3題:本地與平臺運行結果不一致,問題出在哪里?

問題描述:

提交代碼如下(存在錯誤):

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 flag=true;             for(int j=0;j<temp1.length();j++){                 if(temp1.charAt(j)==s.charAt(i)){                     result.add(temp1);                     temp1="";                     flag=false;                     break;                 }             }             if(flag){                 temp1+=String.valueOf(s.charAt(i));             }         }         int target=0;         for(int j=0;j<result.size();j++){             int t=result.get(j).length();             if(t>target){                 target=t;             }         }         return target;     } }

當輸入為空字符串””時,LeetCode平臺輸出0,而本地Visual Studio輸出1。代碼邏輯看似正確,為何出現差異?

問題分析與解答:

關鍵在于result.add(temp1);語句的缺失。循環結束后,temp1可能存儲著最后一段無重復字符的子串,但原代碼未將其添加到result列表。

因此,需要在循環結束后添加以下代碼:

        result.add(temp1); // 關鍵語句,解決空字符串情況         int target=0;         // ... (后續代碼不變)

添加后,即使輸入為空字符串,temp1(空字符串)也會被添加到result,后續循環正確計算target為0,與LeetCode平臺結果一致。

本地Visual Studio輸出1,可能是由于本地運行環境或調試器處理空字符串的方式不同導致的。建議仔細檢查本地環境配置及代碼執行流程。 更重要的是,這段代碼本身的算法邏輯存在缺陷,它并不能正確處理無重復字符的最長子串問題。 應該采用滑動窗口等更有效的算法來解決這個問題。

改進后的代碼 (使用滑動窗口算法):

class Solution {     public int lengthOfLongestSubstring(String s) {         int n = s.length();         int maxLength = 0;         Map<Character, Integer> charIndexMap = new HashMap<>();         int start = 0;         for (int end = 0; end < n; 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
喜歡就支持一下吧
點贊11 分享