这题需要将一个原始字符串 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);
}
两种看似一样,但第二种是错的,而且连输出都不行。
实在是想不通,来询问一下,希望有人解答,谢谢了!