这题需要将一个原始字符串 s 通过给定操作变成新的字符串,有两种方法,我感觉是一样的,但结果却不同。
第一种是用 st 记录原始的字符串 s,然后在 s 上进行修改,代码如下:
void A(string s) {
string st = s;
for(int i = 0; i <= 3; i++)
s[i] = st[i + 4];
for(int i = 4; i <= 7; i++)
s[i] = st[i - 4];
cout << s;
if(!mp.count(s))
mp[s] = mp[st] + 'A', q.push(s);
}
第二种是用 ans 直接记录改过后的 s。代码如下:
void A(string s) {
string ans;
for(int i = 0; i <= 3; i++)
ans[i] = s[i + 4];
for(int i = 4; i <= 7; i++)
ans[i] = s[i - 4];
cout << ans;
if(!mp.count(ans))
mp[ans] = mp[s] + 'A', q.push(ans);
}
两种看似一样,但第二种是错的,而且连输出都不行。
实在是想不通,来询问一下,希望有人解答,谢谢了!