leetCode 2586. 统计范围内的元音字符串数

2586. 统计范围内的元音字符串数

原题描述

给你一个下标从 0 开始的字符串数组 words 和两个整数:left 和 right 。

如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个 元音字符串 ,其中元音字母是 'a''e''i''o''u' 。

返回 words[i] 是元音字符串的数目,其中 i 在闭区间 [left, right] 内。

示例 1:

输入:words = ["are","amy","u"], left = 0, right = 2
输出:2
解释:
- "are" 是一个元音字符串,因为它以 'a' 开头并以 'e' 结尾。
- "amy" 不是元音字符串,因为它没有以元音字母结尾。
- "u" 是一个元音字符串,因为它以 'u' 开头并以 'u' 结尾。
在上述范围中的元音字符串数目为 2 。

示例 2:

输入:words = ["hey","aeo","mu","ooo","artro"], left = 1, right = 4
输出:3
解释:
- "aeo" 是一个元音字符串,因为它以 'a' 开头并以 'o' 结尾。
- "mu" 不是元音字符串,因为它没有以元音字母开头。
- "ooo" 是一个元音字符串,因为它以 'o' 开头并以 'o' 结尾。
- "artro" 是一个元音字符串,因为它以 'a' 开头并以 'o' 结尾。
在上述范围中的元音字符串数目为 3 。

思路

使用数组的下标和值做映射功能,替换哈希表的映射功能,数组的性能更高。

解题方法

预处理元音字符串在在数组中的值为1。

 //标注元音字符在数组中的位置
int[] arr = new int[26];
    arr['a'-'a']++;
    arr['e'-'a']++;
    arr['i'-'a']++;
    arr['o'-'a']++;
    arr['u'-'a']++;
  • 以元音字母开头
arr[words[i].charAt(0)-'a']>0
  • 以元音字母结尾
arr[words[i].charAt(length-1)-'a']>0

元音字符串:字符串以元音字母开头并以元音字母结尾。

if (arr[words[i].charAt(0)-'a']>0&&
        arr[words[i].charAt(length-1)-'a']>0){
    count++;
}

复杂度

  • 时间复杂度: O(n)

  • 空间复杂度: O(n)

Code

class Solution {
public int vowelStrings(String[] words, int left, int right) {
        //标注元音字符在数组中的位置
        int[] arr = new int[26];
        arr['a'-'a']++;
        arr['e'-'a']++;
        arr['i'-'a']++;
        arr['o'-'a']++;
        arr['u'-'a']++;
        int count = 0;
      for (int i = left; i < words.length&&i0&&
                    arr[words[i].charAt(length-1)-'a']>0){
                count++;
            }
        }
        return count;
    }
}

执行效果

leetCode 2586. 统计范围内的元音字符串数_第1张图片

你可能感兴趣的:(leetcode,算法,职场和发展)