当前位置: 首页 > 图灵资讯 > 技术篇> LeetCode第3题:本地与平台运行结果不一致,问题出在哪里?

LeetCode第3题:本地与平台运行结果不一致,问题出在哪里?

来源:图灵教育
时间:2025-03-14 16:26:19

leetcode第三题:本地与平台运行结果不一致,问题排查

在Leetcode第三题“无重复字符的最长子串”中,许多开发者遇到了当地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则输出0 Studio输出1。代码逻辑似乎是正确的。为什么会有差异?

问题分析与回答:

关键在于resulttres.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;
    }
}

该改进代码采用滑动窗算法,效率更高,能正确处理包括空字符串在内的各种输入。 它避免了原代码中复杂的字符串操作和潜在的错误。

以上是Leetcode的第三个问题:本地和平台的运营结果不一致,问题在哪里?详情请关注图灵教育其他相关文章!