LeetCode - 1839 所有元音按顺序排布的最长子字符串

该博客探讨了如何找到一个字符串中最长的子串,这个子串包含不重复的英文字母'a', 'e', 'i', 'o', 'u'。文章通过两种不同的实现方式展示了这个问题的解决方案:一种基于计数和回溯,另一种使用队列和字符比较。这两种方法都旨在优化查找过程,提高效率。
摘要由CSDN通过智能技术生成

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

class Solution {
    public int longestBeautifulSubstring(String word) {
        int len = word.length();
        int left = 0;
        int[] count = new int[5];
        //count[0] -- a的个数
        //count[1] -- e的个数
        //count[2] -- i的个数
        //count[3] -- o的个数
        //count[4] -- u的个数
        int ans = 0;
        int right = 0;
        char lastChar = word.charAt(0);
        while(right < len){
            char ch = word.charAt(right);
            if(ch == 'a' && (count[1] >0 || count[2] >0 || count[3] > 0 || count[4] > 0))
            {
                 left = right;
                 count = new int[5];
            }
            else if(ch == 'e' && (count[0] <=0 || count[2] >0 || count[3] > 0 || count[4] > 0)){
                 right += 1;
                 left = right;
                 count = new int[5];
            }
            else if(ch == 'i' && (count[0] <=0 || count[1] <=0 || count[3] > 0 || count[4] > 0)){
                 right += 1;
                 left = right;
                 count = new int[5];
            }
            else if(ch == 'o' && (count[0] <=0 || count[1] <=0 || count[2] <= 0 || count[4] > 0)){
                 right += 1;
                 left = right;
                 count = new int[5];
            }
            else if(ch == 'u' && (count[0] <=0 || count[1] <=0 || count[2] <= 0 || count[3] <= 0)){
                 right += 1;
                 left = right;
                 count = new int[5];
            }
            else{
                if(ch == 'a'){
                    count[0] += 1;
                }
                if(ch == 'e'){
                    count[1] += 1;
                }
                if(ch == 'i'){
                    count[2] += 1;
                }
                if(ch == 'o'){
                    count[3] += 1;
                }
                if(ch == 'u'){
                    count[4] += 1;
                }
                if(count[0] >0 && count[1] >0 && count[2] >0 && count[3] >0 && count[4] >0)
                {
                    ans = Math.max(ans,right - left + 1);
                }
                right += 1;
            }
        }
        return ans;
    }
}

在这里插入图片描述

class Solution {
    public int longestBeautifulSubstring(String word) {
        int len = word.length();
        int left = 0;
        int ans = 0;
        int right = 1;
        Queue<Character> queue = new LinkedList<>();
        char lastChar = word.charAt(0);
        queue.add(lastChar);
        for(right = 1;right < len;right++){
            char ch = word.charAt(right);
            if(!queue.contains(ch))
               queue.add(ch);
            if(ch >= lastChar){
                if(queue.size()== 5)
                  ans = Math.max(ans,right-left+1);
            }
            else{
                left = right;
                queue.clear();
                queue.add(ch);
            }
            lastChar = ch;
        }
        return ans;
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值