Given a string, determine if a permutation of the string could form a palindrome.
1 | Input: "code" |
实际上 permutation的做法并不是必须的;只是检验能不能form a palindrome
, 并没有要求返回这些palindrome,所以并没有必要记录(list, List<List<…), 如果记录很可能Memory Limit Exceeded:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23class Solution {
public boolean canPermutePalindrome(String s) {
return dfs(s, "");
}
public boolean dfs(String s, String tmp) {
if (tmp.length() == s.length() && isPalindrome(tmp)) return true;
for (int i = 0; i < s.length(); ++i) {
tmp += s.charAt(i);
dfs(s, tmp);
tmp = tmp.substring(0, tmp.length() - 1);
}
return false;
}
public boolean isPalindrome(String s) {
int i = 0, j = s.length() - 1;
while (i < j) {
if (s.charAt(i++) != s.charAt(j--)) return false;
}
return true;
}
}
实际上想想,permutation如果没有要求返回,那么任意顺序的排列,实际上就是成对出现的字母,最多有一个不成对: set
记录出现的字母,有一个存入再来一个remove,看最后set的size:
1 | class Solution { |