背景是有两个字符串 s1s2, 要找到 s2 中的每个字符第一次出现在 s1 中的位置

方法一:

int i = 0;
for (int j = 0; j < s2.size(); j ++ )
{
while (s1[i] != s2[j]) i ++ ;
cout << i << '\n';
}

方法二:

int i = -1;
for (int j = 0; j < s2.size(); j ++ )
{
while (s1[++ i] != s2[j])
;
cout << i << '\n';
}

它们的最大不同之处在于==如果s2中有两个连续的相同的字符,方法一会把这两个字符映射到s1中的同一个位置,方法二会把这两个字符映射到s1中的前后两个位置==

举个栗子

s1 = aaaaa

s2 = aa

根据方法一,s2 的第一个 a 对应 s1 的第一个 as2 的第二个 a 也对应 s1 的第一个 a

根据方法二,s2 的第一个 a 对应 s1 的第一个 as2 的第二个 a 对应 s1 的第二个 a