5417. 定长子串中元音的最大数目
超时版本:暴力解法
public int maxVowels(String s, int k) {
int len = s.length();
int[] dp = new int[len];
char[] chars = s.toCharArray();
int max = 0;
for (int i = 0; i < len - k + 1; i++) {
int count = 0;
for (int j = i; j < i + k; j++) {
if (chars[j] == 'a' || chars[j] == 'e'|| chars[j] == 'i'|| chars[j] == 'o' || chars[j] == 'u'){
count++;
}
}
max = Math.max(max,count);
}
return max;
}
自己写的dp,得调试好久
public int maxVowels1(String s, int k) {
int len = s.length();
int[] dp = new int[len + 1];
dp[0] = 0;
char[] arr = s.toCharArray();
int count = 0;
for (int i = 0; i < len; i++) {
if (arr[i] == 'a' || arr[i] == 'e'|| arr[i] == 'i' || arr[i] == 'o' || arr[i] == 'u') {
dp[i + 1] = ++count;
} else {
dp[i + 1] = count;
}
}
int max = 0;
for (int i = 0; i < len - k + 1; i++) {
max = Math.max(max,dp[i + k] - dp[i]);
if (max >= k) {
return k;
}
}
return max;
}
群里大佬的解法,很巧妙的位运算
int ans = 0;
public int pseudoPalindromicPaths (TreeNode root) {
if (root == null) return 0;
int nums = 0;
dfsp(root,nums);
return ans;
}
private void dfsp(TreeNode root, int temp) {
int n = temp ^ (1 << root.val);
if (root.left == null && root.right == null){
if (n == 0 || (n & (n - 1)) == 0){
++ans;
}
}
if (root.left != null){
dfsp(root.left,n);
}
if (root.right != null){
dfsp(root.right,n);
}
}