统计范围内的元音字符串数【LC2559】
给你一个下标从 0 开始的字符串数组
words
以及一个二维整数数组queries
。每个查询
queries[i] = [li, ri]
会要求我们统计在words
中下标在 li
到 ri
范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。
返回一个整数数组,其中数组的第 i
个元素对应第 i
个查询的答案。
**注意:**元音字母是 'a'
、'e'
、'i'
、'o'
和 'u'
。
又是做过的题 只能自己加练了
前缀和
class Solution { public int[] vowelStrings(String[] words, int[][] queries) { int n = words.length; int m = queries.length; int[] sum = new int[n + 1]; int[] res = new int[m]; Arrays.fill(res, 0); for (int i = 0; i < n; i++){ if (isVowel(words[i])){ sum[i + 1] = sum[i] + 1; }else{ sum[i + 1] = sum[i]; } } for (int i = 0; i < m; i++){ int l = queries[i][0], r = queries[i][1]; res[i] = sum[r + 1] - sum[l]; } return res; } public boolean isVowel(String word){ char c = word.charAt(0); char c1 = word.charAt(word.length() - 1); if ( (c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u') && (c1 == 'a' || c1 == 'e' || c1 == 'i' || c1 == 'o' || c1 == 'u')){ return true; } return false; } }
class Solution { private List<Integer> nums = new ArrayList<>(); public int[] vowelStrings(String[] words, int[][] queries) { Set<Character> vowels = Set.of('a', 'e', 'i', 'o', 'u'); for (int i = 0; i < words.length; ++i) { char a = words[i].charAt(0), b = words[i].charAt(words[i].length() - 1); if (vowels.contains(a) && vowels.contains(b)) { nums.add(i); } } int m = queries.length; int[] ans = new int[m]; for (int i = 0; i < m; ++i) { int l = queries[i][0], r = queries[i][1]; ans[i] = search(r + 1) - search(l); } return ans; } private int search(int x) { int l = 0, r = nums.size(); while (l < r) { int mid = (l + r) >> 1; if (nums.get(mid) >= x) { r = mid; } else { l = mid + 1; } } return l; } } 作者:ylb 链接:https://leetcode.cn/problems/count-vowel-strings-in-ranges/solutions/2293300/python3javacgotypescript-yi-ti-shuang-ji-lhef/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。