P1032 字串变换(bfs,字符串处理)

P1032 字串变换

关于字符串处理

可以看一下这里

在这道题中,主要是要把原字符串的指定子串修改为新的子串.

而在string这一类中,我们有str.replace函数,作用相同.

那么这样本题就完成了.

程序实现

#include<bits/stdc++.h>
using namespace std;
string astr,bstr,ar[8],br[8];
map<string ,int >mp;//mp数组统计步数
map<string ,bool >check;//check数组检查一个状态是否使用过
int n,ans=-1;
void bfs(){
	queue<string>q;
	q.push(astr);
	mp[astr]=0;check[astr]=true;
	while(!q.empty()){
		string str=q.front();
		if(str==bstr){ans=mp[str];break;}
		else if(mp[str]>10)break;
		q.pop();
		for(int i=0;i<n;i++){
			for(int j=0;j<str.size();j++){
				if(str[j]==ar[i][0]){
					bool flag=true;
					for(int k=1;k<ar[i].size();k++){
						if(ar[i][k]!=str[j+k]){flag=false;break;}
					}
					if(flag){
						string nwstr;
						nwstr.assign(str);//等价于nwstr=str;
						nwstr.replace(j,ar[i].size() ,br[i],0,br[i].size() );
						//把nwstr的从j标号开始(不含)的长度为ar[i].len的子串替换成br[i]串
						//注意在内存空间中,字符串下标从0开始,但是在标号中从1开始,这样(0,br[i].size())表示的就是全串了
                        if(check[nwstr])continue;
                        check[nwstr]=true;
						q.push(nwstr);
						mp[nwstr]=mp[str]+1;
					}
				}
			}
		}
	}
	if(ans>=0)printf("%d\n",ans);
    else printf("NO ANSWER!\n");
}
int main(){
	cin>>astr>>bstr;
	while(cin>>ar[n]>>br[n])++n;//只有linux系统才运行得起来的输入
	bfs();
	return 0;
} 
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值