为什么此代码无法正确执行?最长子串问题

时间:2018-10-02 23:34:00

标签: java longest-substring

因此,我试图解决网页中最长子字符串而不重复字符的问题,当我尝试上传它时,它将显示此错误:

class Solution {
public int lengthOfLongestSubstring(String s) {
    HashSet<Character> hash = new HashSet<>();
    int count = 0, finalCount = 1;
    char prevChar = s.charAt(0);
    hash.add(prevChar);


    for (int i = 1; i < s.length(); i++)
    {
        char character = s.charAt(i);
        if (!hash.contains(character)){
            hash.add(character);
            count++;
            if (count > finalCount) finalCount = count;
        }
        else{
            hash.clear();
            hash.add(character);
            count = 1;
        }
        prevChar = character;
    }
    return finalCount;
} }

enter image description here

这有什么问题吗? 如果没有,您认为我的算法有效吗?由于网页不允许我上传它,因此我无法比较它的性能。

2 个答案:

答案 0 :(得分:0)

您在第5行中调用s.charAt(0),我想他们将空字符串作为测试用例传递,并且您遇到了超出范围的异常。在第5行之前,添加检查字符串长度是否为0以及是否返回0。

答案 1 :(得分:0)

根据错误描述,它在Solution类的第5行进行了虚拟吐痰。

基于以下图片:

char prevChar = s.charAt(0);

错误是ArrayIndexOutOfBounds,通常表明您尝试从某事中获得的东西要比实际发生的事多(例如,在数组末尾运行)。

在这里,我建议也许在第3行的某些System.out.println行中进行检查以检查方法参数,例如:

(a)如果输入的String s为空

(b)如果输入的String是空的(例如“”)

charAt(0)将获得第一个字符,但是如果有零个字符,则尝试获取第一个字符是错误,是吗?

NB:类似这样的东西:

 System.out.println("Input was :" + s + ":");

将同时显示这两个条件,

Input was ::

获取空字符串

Input was :null:

输入空字符串