这是我对问题“最长回文子字符串”(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”。 预先感谢!