ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

字串变换

2022-07-24 11:03:15  阅读:127  来源: 互联网

标签:string 变换 sum int 字串 规则


4783: 字串变换

时间限制(普通/Java):1000MS/3000MS     内存限制:65536KByte

描述

已知有两个字串 A, B 及一组字串变换的规则(至多6个规则):

     A1 -> B1

     A2 -> B2

  规则的含义为:在 A中的子串 A1 可以变换为 B1、A2 可以变换为 B2 …。

    例如:A=’abcd’ B=’xyz’

  变换规则为:

    ‘abc’->‘xu’ ‘ud’->‘y’ ‘y’->‘yz’

  则此时,A 可以经过一系列的变换变为 B,其变换的过程为:

   ‘abcd’->‘xud’->‘xy’->‘xyz’

  共进行了三次变换,使得 A 变换为B。

输入

A B

A1 B1   A2 B2 |-> 变换规则

... ... /

所有字符串长度的上限为 20。

输出

若在 10 步(包含 10步)以内能将 A 变换为 B,则输出最少的变换步数;否则输出"NO ANSWER!"

样例输入

abcd xyz
abc xu
ud y
y yz

样例输出

3

广搜,模板稍微改一改就能过:入队时查重,防止同种情况重复入队浪费时间;

记录变换规则时不能用Map存,可能存在多个规则,同一个字符串有多种转换规则

例如 xxxx yyyy

  x y

  x z

后者会覆盖前个规则(当时没考虑到这点,卡了挺久)

直接用两个string数组存就好,然后定义一个int变量记录有几条规则

代码

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 int n;
 4 class Node
 5 {
 6 public:
 7     string s;
 8     int ci;
 9 };
10 int sum=0;
11 string zuo[8],you[8];
12 queue<Node>q;
13 map<string,int>Map;//用于查重
14 int main() 
15 {
16     ios_base::sync_with_stdio(false);
17     cin.tie(nullptr);
18     cout.tie(nullptr);
19     string be,en;
20     cin>>be>>en;
21     string s,t;
22     while(cin>>s>>t)
23     {
24 
25         zuo[sum]=s;
26         you[sum]=t;
27         sum++;
28     }
29     q.push({be,0});
30     while(!q.empty())
31     {
32         Node temp=q.front();
33         q.pop();
34         if(temp.s.compare(en)==0)
35         {
36             cout<<temp.ci<<endl;
37             return 0;
38         }
39         int len=temp.s.length();
40         for(int i=0;i<len;i++)
41         {
42             for(int j=0;j<sum;j++)
43             {
44                 if(temp.s.substr(i,zuo[j].length()).compare(zuo[j])==0)
45                 {
46                     string tem=temp.s.substr(0,i)+you[j]+temp.s.substr(i+zuo[j].length()); //获取转换后的字符串
47                     if(temp.ci<10&&Map[tem]!=1)//符合条件并未搜过的情况入队
48                     {
49                         q.push({tem,temp.ci+1});
50                         Map[tem]=1;
51                     }
52                 }
53             }
54         }
55     }
56     cout<<"NO ANSWER!"<<endl;
57     return 0;
58 }

 

标签:string,变换,sum,int,字串,规则
来源: https://www.cnblogs.com/minz-io/p/16514070.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有