Leetcode 228 && 392

文章讲述了如何使用双指针算法解决区间是否有序的问题,以及判断一个子序列是否是另一个字符串的子序列的问题。通过比较和移动指针实现高效求解。
摘要由CSDN通过智能技术生成

题目

228. 汇总区间

思路

用双指针解决,left指向有序区间的起点,right指向有序区间的终点+1,判断right指向的区间是否有序则根据nums[right] = right - left +nums[left];

代码

public List<String> summaryRanges(int[] nums) {
        // 双指针
        List<String> re = new ArrayList<>();
        if(nums.length == 0){
            return re;
        }
        int left = 0;
        int right = 0;
        while(right < nums.length){
            if(left == right || nums[right] == nums[left] + right - left){
                right ++;
            }
            else{
                // right-left <= 1 即表示当前连续有序区间只有一个数
                String temp = right - left <= 1? String.valueOf(nums[left]):String.valueOf(nums[left]) + "->" + String.valueOf(nums[right-1]);
                re.add(temp);
                left = right++;
            }
        }
        // 记录跳出循环的最后一个子区间
        String temp = right - left <= 1? String.valueOf(nums[left]):String.valueOf(nums[left]) + "->" + String.valueOf(nums[right-1]);
        re.add(temp);
        return re;
    }

题目

392. 判断子序列

思路

使用双指针分别指向子序列和原序列,只有当原序列与子序列的字符相等时,两个指针往后移;否则值将原序列指针往后移,知道遍历完原序列的所有字符串;

代码

public boolean isSubsequence(String s, String t) {
        // 使用双指针分别指向s和t
        if(s.isEmpty()){
            return true;
        }
        int sp = 0;
        int tp = 0;
        while(tp < t.length()){
            if(t.charAt(tp) == s.charAt(sp)){
                // 相等时 继续往后走一个位置继续判断
                sp ++;
                if(sp == s.length()){
                    return true;
                }
            }
            tp ++;
        }
        return false;
    }

Tips

字符串的长度是s.length(),判断字符串为空s.isEmpty() 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值