其他分享
首页 > 其他分享> > 5417.定长子串中元音的最大数目

5417.定长子串中元音的最大数目

作者:互联网

image-20200524152056530

提示

思路

代码

/*
 *12ms  
 */
public int maxVowels(String s, int k) {
        int ans=0;
        if(k>=s.length()){
            for(char c:s.toCharArray()){
                if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){
                    ans++;
                }
            }
            return ans;
        }else{
            int len=0;
            //预处理
            for(int i=0;i<k;i++){
                char c=s.charAt(i);
                if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){
                    len++;
                }
            }
            ans=len;
            for(int left=1,end=k;end<s.length();end++, left++){
                char preLeft=s.charAt(left-1);
                char c=s.charAt(end);
                if(preLeft=='a'||preLeft=='e'||preLeft=='i'||preLeft=='o'||preLeft=='u'){
                    len--;
                }
                if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){
                    len++;
                }
                ans=Math.max(ans, len);

            }
            return ans;
        }
    }

优化

/*
 * 12ms
 */
public int maxVoAnInt3(String s,int k){
        int  n=s.length(),ans=0,count=0;
        for(int i=0,j=0;j<n;j++){
            //右指针
            char c=s.charAt(j);
            if(c=='a'||c=='e'||c=='i'||c=='o'||c=='u'){
                count++;
            }
            //当长度大于k时,左指针开始移动
            if(j>k-1){
                //左指针
                char c1=s.charAt(i);
                if(c1=='a'||c1=='e'||c1=='i'||c1=='o'||c1=='u'){
                    count--;
                }
                i++;
            }
            ans=Math.max(ans, count);
        }
        return ans;
    }

以上优化是参考以下代码,原文:Alex:Java双指针滑动窗口

   /**
     * 以"aeiou"为参照
     * 22ms
     */
    public int maxVowAnInt2(String s,int k){
        int n=s.length();
        int count=0,ans=0;
        int i=0;
        for(int j=0;j<n;j++){
            if("aeiou".indexOf(s.charAt(j))!=-1)count++;
            if(j>k-1){
                if("aeiou".indexOf(s.charAt(i))!=-1) count--;
                i++;
            }
            ans=Math.max(ans, count);
        }
        return ans;
    }

	

标签:子串,count,5417,int,定长,ans,元音,滑动,c1
来源: https://www.cnblogs.com/yh-simon/p/12951260.html