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

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

部分用戶在LeetCode平臺和visual studio上運行LeetCode第3題“無重復字符的最長子串”代碼時,發現輸出結果存在差異。例如,輸入空字符串””時,LeetCode平臺輸出0,而Visual Studio可能輸出1。本文分析此差異產生的原因。

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

問題代碼片段(存在缺陷):

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 (!temp1.contains(String.valueOf(s.charAt(i)))) {                 temp1 += String.valueOf(s.charAt(i));             } else {                 result.add(temp1);                 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;     } }

當輸入為空字符串時,循環體不會執行,result數組為空,程序直接返回target的初始值0。Visual Studio的輸出結果可能因其運行環境或其他因素而異。

問題根源: 代碼邏輯存在缺陷。循環結束后,temp1可能包含未添加到result數組中的字符串。

修正后的代碼:

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 (!temp1.contains(String.valueOf(s.charAt(i)))) {                 temp1 += String.valueOf(s.charAt(i));             } else {                 result.add(temp1);                 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;     } }

通過添加result.add(temp1);,即使輸入為空字符串,result數組也會包含一個空字符串,從而正確返回長度0。 LeetCode平臺的運行環境更標準化,而Visual Studio的結果可能受環境影響。 然而,即使修正后,這段代碼的效率仍然很低,不建議用于實際生產環境。 建議使用滑動窗口算法解決LeetCode第3題。

? 版權聲明
THE END
喜歡就支持一下吧
點贊5 分享