#include<iostream> #include<unordered_set> using namespace std; string a,b; int n; unordered_set<string> st; inline bool check(int l,int r){ for(register int i=0;i<n;i++){ if(a[i]==b[l]){ l++; } if(l>r){ return true; } } return false; } inline string strc(int l,int r){ string s=""; for(register int i=l;i<=r;i++){ s+=b[i]; } return s; } signed main(){ cin.sync_with_stdio(false); cin.tie(0); cout.tie(0); cin>>n>>a>>b; bool flag=1; for(int i=0;i+1<n;i++){ if(b[i]!=b[i+1]){ flag=0; } } if(flag){ cout<<n; return 0; } int sum=0; for(register int i=0;i<n;i++){ for(register int j=i;j<n;j++){ string s=strc(i,j); if(check(i,j)&&!st.count(strc(i,j))){ sum++; st.insert(s); } } } cout<<sum; return 0; }
时间: 2023-07-14 21:10:11 浏览: 79
#include_iostream.h_
4星 · 用户满意度95%
这段代码是一个字符串匹配的问题。它的功能是统计字符串 b 中有多少个连续子串与字符串 a 完全匹配。代码首先将字符串 a 和 b 读入,并创建一个 unordered_set 用于记录已经匹配过的子串。
然后,代码通过遍历字符串 b 的所有可能的起始和结束位置,将其所对应的子串与字符串 a 进行匹配。匹配的过程是通过一个 check 函数来完成的,它会逐个比较字符串 a 和 b 的字符,如果匹配成功,就将指针 l 向右移动,直到整个字符串 a 都被匹配完。如果在匹配过程中,指针 l 超过了指针 r,说明匹配成功。
如果匹配成功且当前子串还没有被记录在集合 st 中,就将子串加入集合 st,并将计数器 sum 加一。
最后,输出计数器 sum 的值,即为与字符串 a 完全匹配的子串个数。
请问有什么其他问题我可以帮助你解答的吗?
阅读全文