AcWing 5274. 字符串出现位置
原题链接
简单
作者:
异城
,
2024-04-22 16:21:04
,
所有人可见
,
阅读 3
C++ 代码
用的是串的模式匹配的暴力匹配
#include<iostream>
using namespace std;
int main()
{
string s1,s2; // 声明两个字符串变量 s1 和 s2
int n,m; // 声明两个整型变量 n 和 m
cin >> n; // 输入整数 n
cin >> s2; // 输入字符串 s2
cin >> m; // 输入整数 m
cin >> s1; // 输入字符串 s1
int i = 0,j = 0; // 声明两个整型变量 i 和 j,并初始化为 0
int k1 = 0; // 声明整型变量 k1,并初始化为 0,用于记录当前匹配失败后重新开始匹配的位置
while(i < s1.length() && j < s2.length()) // 循环直到其中一个字符串遍历结束
{
if(s1[i] == s2[j]) // 如果当前位置的字符匹配
{
i++; // 移动到 s1 中的下一个字符
j++; // 移动到 s2 中的下一个字符
}
else // 如果当前位置的字符不匹配
{
k1++; // 增加 k1,指示从 s1 的下一个位置重新开始匹配
i = k1; // 设置 i 为 k1,重新开始匹配
j = 0; // 设置 j 为 0,重新开始匹配 s2
}
if(j >= s2.length()) // 如果已经匹配完整个 s2
{
cout << k1 << ' '; // 输出当前匹配成功的起始位置
k1++; // 增加 k1,指示从 s1 的下一个位置重新开始匹配
i = k1; // 设置 i 为 k1,重新开始匹配
j = 0; // 设置 j 为 0,重新开始匹配 s2
}
}
return 0;
}