CodeForces 1015B-Obtaining the String

不念不忘少年蓝@ 2022-05-17 11:53 241阅读 0赞
  • CodeForces 1015B-Obtaining the String


  • 题目链接:B. Obtaining the String

  • 思路:

题目大意是给两个字符串,对串1某相邻两个字符进行交换,直到两个字符相等,输出交换次数及交换的下标i

我是定住了串2,然后查找串2对应位置的字符在串1中的位置如果两个位置是相等的,那么不需要进行操作,串2下标+1如果不相等,每次将查找到的字符与前一个字符进行交换,保存查找字符的下标,直到该字符下标与串2下标的字符相等,串2下标+1,进行下一次匹配

看下样例和提示

6
abcdef
abdfec

4
3 5 4 5

Node:”abcdef” →→ “abdcef” →→ “abdcfe” →→ “abdfce” →→ “abdfec”.

  • 代码:

    include

    include

    using namespace std;

    define MAX_SIZE 100005

    string Str1,Str2;
    int Res[MAX_SIZE];
    int Len;
    int main()
    {

    1. cin>>Len;
    2. cin>>Str1>>Str2;
    3. int Path=0;
    4. int i=0,j;
    5. int Break_Flag=0;
    6. while(i<Str2.size())
    7. {
    8. for(j=i;j<Str2.size();j++)
    9. if(Str2[i]==Str1[j])
    10. break;
    11. if(j>=0&&j<Str2.size()) //find
    12. {
    13. if(j!=i)
    14. {
    15. Res[Path++]=j;
    16. char Temp=Str1[j];
    17. Str1[j]=Str1[j-1];
    18. Str1[j-1]=Temp;
    19. //cout<<Str1<<endl;
    20. if(Str1[i]==Str2[i])
    21. i++;
    22. }
    23. else
    24. i++;
    25. }
    26. else
    27. {
    28. Break_Flag=1;
    29. break;
    30. }
    31. }
    32. if(Break_Flag)
    33. cout<<"-1"<<endl;
    34. else
    35. {
    36. cout<<Path<<endl;
    37. for(i=0;i<Path;i++)
    38. {
    39. if(i)
    40. cout<<" "<<Res[i];
    41. else
    42. cout<<Res[i];
    43. }
    44. }
    45. return 0;

    }

发表评论

表情:
评论列表 (有 0 条评论,241人围观)

还没有评论,来说两句吧...

相关阅读