Leetcode 228 && 392

题目

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() 

上一篇:中值滤波算法与SSE2指令集并行优化


下一篇:信息工程大学第五届超越杯程序设计竞赛(同步赛)题解