LinkedIn onsite一道题# JobHunting - 待字闺中
j*r
1 楼
给一个string, 可以删除任意字符,求所有可以得到的palidrome字串集
我就想了个递归, 还是没有区分掉一些重复的情况,worst case O(2^n)基本同暴力解
Map> allSubSet = new HashMap();
Set getAllPalidrome(String s, int x, int y){
int ind = x * s.length() + y;
if(allSubSet.constainsKey(ind)) return allSubSet.get(ind);
Set ret = new HashSet();
if (s == null || s.size() == 0) { ret.add(""); return ret;}
if (s.size() == 1) { ret.add(s); return ret;}
for(int i = x; i <= y; i++){
for (int j = y; j >= i; j--){
if (s.charAt(i) == s.charAt(j)){
Set subSet = getAllPalidrome(s, i + 1, j - 1);
ret.addAll(subSet);
for (String str : subSet) ret.add(s.charAt(i) + str + s.charAt(i));
}
}
}
allSubSet.put(ind, ret);
return ret;
}
我就想了个递归, 还是没有区分掉一些重复的情况,worst case O(2^n)基本同暴力解
Map
Set
int ind = x * s.length() + y;
if(allSubSet.constainsKey(ind)) return allSubSet.get(ind);
Set
if (s == null || s.size() == 0) { ret.add(""); return ret;}
if (s.size() == 1) { ret.add(s); return ret;}
for(int i = x; i <= y; i++){
for (int j = y; j >= i; j--){
if (s.charAt(i) == s.charAt(j)){
Set
ret.addAll(subSet);
for (String str : subSet) ret.add(s.charAt(i) + str + s.charAt(i));
}
}
}
allSubSet.put(ind, ret);
return ret;
}