字符串子序列[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