双指针题目

news2024/9/21 16:36:51

 比较含退格的字符串

 

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

class Solution {
    public boolean backspaceCompare(String S, String T) {
        int S_Len = S.length(), T_Len = T.length();
        char[] S_arr = S.toCharArray(), T_arr = T.toCharArray();
        int skipS = 0, skipT = 0;
        for (int i = S_Len - 1, j = T_Len - 1; i >= 0 || j >= 0; i--, j--) {
            while (i >= 0) {
                if (S_arr[i] == '#') {
                    skipS++;
                    i--;
                } else if (skipS > 0) {
                    // 遇到字符, 但由于需要回退, 所以还需要前移1位
                    skipS--;
                    i--;
                } else {
                    // 遇到字符, 且不能回退了, 所以需要比对这个字符是否与T对应位置上的字符相等
                    break;
                }
            }
            while (j >= 0) {
                if (T_arr[j] == '#') {
                    skipT++;
                    j--;
                } else if (skipT > 0) {
                    skipT--;
                    j--;
                } else {
                    break;
                }
            }
            if (i >= 0 && j >= 0) {
                if (S_arr[i] != T_arr[j]) return false;
            } else if (i >= 0 || j >= 0) {
                // 有其中一方已经遍历完整个字符串, 但另外一方没有遍历完整个字符串, 直接返回false
                return false;
            }
        }
        return true;
    }
}

 有序数组的平方

输入:nums = [-4,-1,0,3,10]
输出:[0,1,9,16,100]
解释:平方后,数组变为 [16,1,0,9,100]
排序后,数组变为 [0,1,9,16,100]

class Solution {
    public int[] sortedSquares(int[] nums) {
        int right = nums.length - 1;
        int left = 0;
        int[] result = new int[nums.length];
        int index = result.length - 1;
        while (left <= right) {
            if (nums[left] * nums[left] > nums[right] * nums[right]) {
                result[index--] = nums[left] * nums[left];
                ++left;
            } else {
                result[index--] = nums[right] * nums[right];
                --right;
            }
        }
        return result;
    }
}

 76. 最小覆盖子串

给你一个字符串 s 、一个字符串 t 。返回 s 中涵盖 t 所有字符的最小子串。如果 s 中不存在涵盖 t 所有字符的子串,则返回空字符串 "" 。 

输入:s = "ADOBECODEBANC", t = "ABC"
输出:"BANC"
class Solution {
    public String minWindow(String s, String t) {
        if (t.length() > s.length()) {
			return "";
		}
        Map<Character, Integer> need = new HashMap<>();// 统计所需字符及其数量
		for (int i = 0; i < t.length(); i++) {
			need.put(t.charAt(i), need.getOrDefault(t.charAt(i), 0) + 1);
		}
        Map<Character, Integer> window = new HashMap<>();// 统计窗口内的字符及其数量
		int valid = 0;// 满足条件的字符数
		int l = 0, r = 0;
		int min_LEN = Integer.MAX_VALUE, min_LEFT = 0;//记录最小窗口的长度和开始位置
		while (r < s.length()) {
			// 扩大右边界
			char ch = s.charAt(r);
			r++;
			window.put(ch, window.getOrDefault(ch, 0) + 1);
			if (window.get(ch).equals(need.get(ch))) {
				valid++;
			}

			// 满足条件时缩小窗口
			while (valid == need.size()) {
				// 记录当前窗口
				if (r - l < min_LEN) {
					min_LEN = r - l;
					min_LEFT = l;
				}

				// 缩小左边界
				char c = s.charAt(l);
				if (window.get(c).equals(need.get(c))) {
					valid--;
				}
				window.put(c, window.get(c) - 1);
				l++;
			}
		}
		return min_LEN == Integer.MAX_VALUE ? "" : s.substring(min_LEFT, min_LEFT + min_LEN);
    }
}

438. 找到字符串中所有字母异位词

给定两个字符串 s 和 p,找到 s 中所有 p 的 异位词 的子串,返回这些子串的起始索引。不考虑答案输出的顺序。

输入: s = "cbaebabacd", p = "abc"
输出: [0,6]
解释:
起始索引等于 0 的子串是 "cba", 它是 "abc" 的异位词。
起始索引等于 6 的子串是 "bac", 它是 "abc" 的异位词。

class Solution {
    public List<Integer> findAnagrams(String s, String p) {
        int sLen = s.length();
        int pLen = p.length();
        List<Integer> res = new ArrayList<>();
        int[] sBuc = new int[26]; //待处理词频桶
        int[] pBuc = new int[26]; //目标词频桶
        for(int i = 0; i < pLen; i++){ //统计目标词频
            pBuc[p.charAt(i) - 'a']++;
        }
        int l = 0; //左窗口
        for(int r = 0; r < sLen; r++){ //右窗口
            sBuc[s.charAt(r) - 'a']++; //记录待处理词频桶
            if(r - l + 1 > pLen){ //当窗口长度超过目标字符串长度
                sBuc[s.charAt(l++) - 'a']--; //左窗口向右移动, 同时清空刚才左窗口加入到待处理词频桶的字符
            }
            if(Arrays.equals(sBuc, pBuc)){ //如果待处理词频桶和左窗口词频桶内容一样
                res.add(l); //记录左窗口
            }
        }
        return res;
    }
}

字母异位词分组

class Solution {
    public List<List<String>> groupAnagrams(String[] strs) {
        HashMap<String,Integer> hm=new HashMap();
        List<List<String>> list=new ArrayList();
        for(int i=0;i<strs.length;i++){
            String tmp=strs[i];
            Arrays.sort(tmp);
            if(hm.containsKey(tmp)){
                int index=hm.get(tmp);
                list.get(index).add(strs[i]);
            }else{
                List<String> list1=new ArrayList();
                list1.add(strs[i]);
                list.add(list1);
            }
        }
        return list;
    }
}

454. 四数相加 II

class Solution {
    public int fourSumCount(int[] nums1, int[] nums2, int[] nums3, int[] nums4) {
        Map<Integer, Integer> map = new HashMap<>();
        int temp;
        int res = 0;
        //统计两个数组中的元素之和,同时统计出现的次数,放入map
        for (int i : nums1) {
            for (int j : nums2) {
                temp = i + j;
                if (map.containsKey(temp)) {
                    map.put(temp, map.get(temp) + 1);
                } else {
                    map.put(temp, 1);
                }
            }
        }
        //统计剩余的两个元素的和,在map中找是否存在相加为0的情况,同时记录次数
        for (int i : nums3) {
            for (int j : nums4) {
                temp = i + j;
                if (map.containsKey(0 - temp)) {
                    res += map.get(0 - temp);
                }
            }
        }
        return res;
    }
}

18. 四数之和

class Solution {
    public List<List<Integer>> fourSum(int[] nums, int target) {
        Arrays.sort(nums);
        List<List<Integer>> list = new ArrayList<>();
        for (int i = 0; i < nums.length; i++) {
            // 去重
            if (i > 0 && nums[i] == nums[i - 1]) {
                continue;
            }
            for (int j =  i + 1; j < nums.length; j++) {
                if (j > i + 1 && nums[j] == nums[j - 1]) {
                    continue;
                }
                int left = j + 1;
                int right = nums.length - 1;
                while (left < right) {
                    int sum = nums[i] + nums[j] + nums[left] + nums[right];
                    if (sum > target) {
                        right--;
…                        }
                        left++;
                        right--;
                    }
                }
            }
        }
        return list;
    }
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/64434.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

[附源码]计算机毕业设计数字乡村基础治理系统Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

NFV网络云落地过程中若干问题分析

Labs 导读NFV技术从诞生起&#xff0c;从根本上来说就是为了解决运营商网络演进中部署成本高&#xff0c;迭代更新慢&#xff0c;架构僵化等痛点问题。同时&#xff0c;在引入NFV技术前&#xff0c;旧有产业链相对单一&#xff0c;核心成员主要包括设备制造商、芯片制造商等&am…

[Mysql]数据库约束

文章目录前言1. 数据库约束1.1 not null1.2 unique1.3 primary key,主键约束1.4 default,设置默认值1.5 foreign key 外键约束前言 数据库约束,在实际应用中&#xff0c;由于某些特定的要求&#xff0c;例如学生的学号不能为空&#xff0c;学生表中的班级id,在班级表中要能存在…

python足球作画

努力是为了不平庸~ 学习的最大理由是想摆脱平庸&#xff0c;早一天就多一份人生的精彩&#xff1b;迟一天就多一天平庸的困扰。 足球&#xff08;Football[英]、 Soccer[美]&#xff09;是一项以脚为主&#xff0c;控制和支配球&#xff0c;两支球队按照一定规则在同一块长方形…

HTML如何制作公司网站首页(web前端期末大作业)

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

新老用户该如何选择腾讯云服务器!

随着云计算的快速发展&#xff0c;很多用户都选择上云&#xff0c;上运中最常见的产品就是云服务器CVM和轻量应用服务器了&#xff0c;那么怎么选购最优惠呢&#xff0c;这篇文章将介绍新老用户选购腾讯云服务器的几个优惠方法。 一、买赠专区 第一个介绍的就是买赠专区&…

软考高级——系统架构设计师通关宝库

关于报考时间。每年8到9月进行报名&#xff0c;11月考试。一定要关注报名时间&#xff0c;各省有些许差别。系统架构设计师一年只有一次考试机会。 关于考试科目。考试科目分为 综合题&#xff08;选择题案例分析题论文题。 其中综合题只有75道&#xff0c;考试时间两个半小时…

企企通成功入选「亿欧EqualOcean 2022 中国SaaS 50强」榜单!

近日&#xff0c;由EqualOcean全球化智库主办的2022 EqualOcean Summit for Globalization (ESG) 2022 全球化峰会顺利召开,并重磅发布《2022年中国SaaS 50强》榜单。作为行业领先的数字化采购SaaS服务商&#xff0c;企企通凭借在SRM领域的持续创新和深厚的SaaS服务经验成功入选…

CSS栅格布局(Grid)

今天写页面布局&#xff0c;突然想到了栅格布局&#xff0c;以往习惯了弹性布局&#xff0c;然后发现栅格布局有点香&#xff0c;然后就简单的整理了一下&#xff0c;用于学习与分享。 一、什么是栅格布局 可以理解为将一个元素分成行列&#xff0c;然后可以设置对应的大小、布…

接口自动化测试:mock server之Moco工具

什么是mock server mock&#xff1a;英文可以翻译为模仿的&#xff0c;mock server是我们用来解除依赖&#xff08;耦合&#xff09;&#xff0c;假装实现的技术&#xff0c;比如说&#xff0c;前端需要使用某些api进行调试&#xff0c;但是服务端并没有开发完成这些api&#…

机器学习:在SAS中运行随机森林

为了在SAS中运行随机森林&#xff0c;我们必须使用PROC HPFOREST指定目标变量&#xff0c;并说明天气变量是“类别”还是“定量”。 最近我们被客户要求撰写关于随机森林的研究报告&#xff0c;包括一些图形和统计输出。为了进行此分析&#xff0c;我们使用了目标&#xff08;…

Kamiya艾美捷抗胸腺嘧啶二聚体单抗(环丁烷嘧啶二聚体CPD)说明书

Kamiya艾美捷抗胸腺嘧啶二聚体单抗相关性质&#xff1a; 同义词&#xff1a;环丁烷嘧啶二聚体&#xff08;CPD&#xff09; 特异性&#xff1a;与由以下物质产生的胸腺嘧啶二聚体发生特异性反应&#xff1a;双链或单链DNA的紫外线照射。不与&#xff08;6-4&#xff09;照片产…

基于安卓的校园信息助手系统设计(Eclipse开发)

使用说明 1.1 软件的安装 将.api文件安装到iphone手机上&#xff0c;点击图标即可使用。 2.2 软件的使用 2.2.1 初始界面 软件安装好之后&#xff0c;在手机上显示初始界面。 2.2.2 程序主界面 主要有【课程表模块】、【新闻模块】、【学校概况模块】、【黄页模块】、【考生问答…

程序员的刻板印象,都是真的吗?

自从当了程序员&#xff0c;身边人对于我的职业一直好奇不断&#xff0c;刚好看到网上大家的刻板印象&#xff0c;整理几个最常见的问题&#xff0c;实事求是地解答一下&#xff01; “青春饭、35岁危机、会修电脑、年薪10w、还有戴眼镜、格子衫、发际线高” 这些大家都在网上见…

8-事件组或标志

1-事件位&#xff08;标志&#xff09; 事件位用于指示事件是否发生。事件位通常称为事件标志。例如&#xff0c;一个应用程序可以&#xff1a; 定义一个标志&#xff0c;当为1时&#xff0c;表示消息已经接收并进行处理&#xff0c;当为0时&#xff0c;表示没有消息要处理。…

【王道计算机网络笔记】数据链路层-数据链路层的功能

文章目录数据链路层的研究思想数据链路层基本概念数据链路层功能概述为网络层提供服务链路管理帧定界、帧同步与透明传输&#xff08;组帧&#xff09;封装成帧透明传输组帧方法字符计数法字符填充法零比特填充法违规编码法流量控制停止-等待协议停等协议-无差错情况停等协议-有…

es搜索功能——DSL查询文档——DSL基本语法

1、查询的基本语法 # GET请求方式&#xff08;固定写法&#xff09; # indexName 要查询的索引库 # _search 查询语句的固定格式 GET /indexName/_search {"query": {"查询类型": {"查询条件": "条件值"}} } 2、无条件查询&#xff…

基础入门 - Spring Boot HelloWorld 第一节

需求&#xff1a;浏览器发送 /hello 请求&#xff0c;响应 Hello&#xff0c;Spring Boot 2 创建 maven 项目 boot-01-helloworld 如果想用Spring Boot来进行开发 需要在pom中创建父工程 <!-- Spring Boot 父工程 --> <parent> <groupId>org.springframew…

医疗健康产品展

​ 国内医疗健康行业的独角兽公司&#xff08;估值超10亿&#xff09; 下面&#xff0c;我们先看名列第二的企业&#xff1a; 微医&#xff08;平安医疗健康管理股份有限公司&#xff09; 基本信息 微医是国际领先的医疗健康科技平台&#xff0c;由廖杰远及其团队于2010年创建…

【GD32F427开发板试用】FreeRTOS移植工程

本篇文章来自极术社区与兆易创新组织的GD32F427开发板评测活动&#xff0c;更多开发板试用活动请关注极术社区网站。作者&#xff1a;kings669669 前言 为了方便需要FreeRTOS&#xff0c;附上移植完毕的工程&#xff0c;方便大家后续的开发。 GitHub&#xff1a;https://githu…