LeetCode第3題:為何我的無重復字符最長子串代碼在LeetCode平臺和本地環境輸出結果不同?

leetcode第3題:無重復字符最長子串——本地與平臺輸出差異解析

本文分析LeetCode第3題“無重復字符的最長子串”中,用戶代碼在本地環境和LeetCode平臺輸出結果不同的問題。題目要求找出字符串中最長無重復字符子串的長度。

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
喜歡就支持一下吧
點贊6 分享