438. 找到字符串中所有字母异位词(C++题解版含VS可运行源码)

本文提供了两种C++解决方案来找出字符串中的字母异位词,包括滑动窗口和索引指针的方法,并附带VS可运行源码。
摘要由CSDN通过智能技术生成

438. 找到字符串中所有字母异位词(C++题解版含VS可运行源码)

1.力扣C++源码

方法一

class Solution {
   
public:
    vector<int> findAnagrams(string s, string p) {
   
        vector<int> ans;

		// 定义一个 needs 数组来看 arrP 中包含元素的个数
		int needs[26] = {
   };
		// 定义一个 window 数组来看滑动窗口中是否有 arrP 中的元素,并记录出现的个数
		int window[26] = {
   };

		// 先将 p 中的元素保存到 needs 数组中
		for (int i = 0; i < p.size(); i++) {
   
			needs[p[i] - 'a'] += 1;
		}

		// 定义滑动窗口的两端
		int left = 0;
		int right = 0;

		// 右窗口开始不断向右移动
		while (right < s.size()) {
   
			int curR = s[right] - 'a';
			right++;
			// 将右窗口当前访问到的元素 curR 个数加 1 
			window[curR] += 1;

			// 当 window 数组中 curR 比 needs 数组中对应元素的个数要多的时候就该移动左窗口指针 
			while (window[curR] > needs[curR]) {
   
				int curL = s[left] - 'a';
				left++;
				// 将左窗口当前访问到的元素 curL 个数减 1 
				window[curL] -= 1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卜凡.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值