在我的代码中需要帮助(访问地图键时错误:NullPointerException)

时间:2019-06-04 20:56:08

标签: java

这是我对问题“最长回文子字符串”(Leetcode问题https://leetcode.com/problems/longest-palindromic-substring/)的看法。因此,我尝试遍历每个子字符串以查看它们是否是回文,然后将回文子字符串及其长度存储在地图中。 但是,当使用值(int:-3)访问键(string:-“ aba”)时,出现错误“ Line 27:java.lang.NullPointerException”。

我尝试给出忽略长度小于3的字符串的测试用例,但我仍然遇到问题,较长的字符串可以正常工作。

class Solution {
    public String longestPalindrome(String s) {
        ArrayList<String> arr = new ArrayList<>();
        arr = allSubStr(s);
        if(s == null || s.length() <= 2)
            return s;
        //System.out.println("before" + arr);
        for(int i = 0; i < arr.size(); i++){
            if(!isPali(arr.get(i))){
                arr.remove(i);
            }
        }
        //System.out.println("after" + arr);
        Map<String, Integer> map = new HashMap<>();
        for(int i =0; i < arr.size(); i++){
            map.put(arr.get(i), arr.get(i).length());
        }
        Map.Entry<String, Integer> maxEntry = null;
        String maxVal = "";
        for (Map.Entry<String, Integer> entry : map.entrySet()){
            //System.out.println(maxEntry.getValue());
            if (maxEntry == null || entry.getValue().compareTo(maxEntry.getValue()) > 0){
                maxEntry = entry;
                maxVal = entry.getKey();
            }
        }
        return maxEntry.getKey();

    }
    public static boolean isPali(String str){
        int i =0;
        int j = str.length() -1;
        char[] word = str.toCharArray();
        while(j > i){
            if(word[i] != word[j])
                return false;
            i++;
            --j;
        }
        return true;
    }

    public static ArrayList<String> allSubStr(String str){
        ArrayList<String> temp = new ArrayList<>();
        for(int i =0; i < str.length(); i++){
            for(int j =i+1; j < str.length(); j++){
                temp.add(str.substring(i,j));
            }
        }
        for(int i =0; i < temp.size(); i++){
            if(temp.get(i).length() < 2){
                temp.remove(i);
            }
        }
        return temp;
    }
}

那么,有人能指出我在哪里犯错吗?当给定字符串“ babad”或其任何替代形式时,输出应为“ aba”。 预先感谢!

0 个答案:

没有答案