首页 > 其他分享 >字符串子序列,双指针

字符串子序列,双指针

时间:2022-09-30 13:56:57浏览次数:76  
标签:string int 序列 str 字符串 include 指针

字符串子序列[https://www.online1987.com/字符串子序列/]

#define _CRT_SECURE_NO_WARNINGS 1//可省略
#include<iostream>
using namespace std;
#include<string>
#include<vector>
int fuc(string &sub, string &str) {
	int p1 = 0;
	int p2 = 0;
	vector<int> res ;
	while (p2 <= str.size()) {
		if (sub[p1] == str[p2]) {
			if(p1==0) res.push_back(p2)//记录所有起点。
			p1=(p1+1)%sub.size();//让子串循环遍历。
            ++p2;
		}
		else
			++p2;//(不管p1指向的字符与p2指向的字符是否相等,p2都要走,使用else是防止p2走2次)
	}
	if (p1 == 0) return res.back();//判断最后一个字串走完没有,如果走完直接返回最后一个元素,如果没走完弹出最后一个,返回倒数第二个。(因为只有两种情况:1.str中的abc序列为sub的整数倍,2.str中的abc序列不是sub的整数倍)
	else
		res.pop_back();
	return res.back();
}
int main() {
	string sub;
	cin >> sub;
	string str;
	cin >> str;
	cout<<fuc(sub, str)<<endl;
}

标签:string,int,序列,str,字符串,include,指针
From: https://www.cnblogs.com/chunbai11/p/16744664.html

相关文章