文章

17

粉丝

177

获赞

2

访问

118.8k

头像
层级遍历方式,每层进行对称性判断
P1551 东北大学机试题
发布于2022年1月6日 19:29
阅读数 7.2k

#include<iostream>
#include<queue>
using namespace std;
int main(){
	string s;
	queue<int> que; //编号队列
	cin >> s;
	bool result = true;
	if(s[0]!= '#') que.push(0);
	while(!que.empty()){
		int size = que.size();
		string temp; // 接住每层构成的字符串
		for(int i = 0;i < size;i++){
			int index = que.front();
			que.pop();
			if(s[index] != '#') temp.push_back('A');//对不是'#'的字符都统一成一个字符
			else temp.push_back('#');
			if(2 * index + 1 < s.size()) que.push(2 * index + 1);
			if(2 * index + 2 < s.size()) que.push(2 * index + 2);	
		}
        //对称性判断,不对称直接退出循环
		int i;
		for(i = 0;i < temp.size() / 2;i++)
			if(temp[i] != temp[temp.size() - 1 - i]) break;
		if(i != temp.size() / 2) {result = false; break;}
	}
	if(result) cout << "YES" << endl;
	else cout << "NO" << endl;
}

 

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发