• 深信服入职前编码训练21题--01


    题目描述:

    已知某一个字母序列,把序列中的字母按出现顺序压入一个栈,在入栈的任意过程中,允许栈中的字母出栈,求所有可能的出栈顺序

    输入描述:

    字符串,如:abc

    输出描述:

    可能的出栈顺序,每行一种顺序
    示例1
    输入
    
    abc
    
    输出
    
    abc
    acb
    bac
    bca
    cba

    分析:对输入进行全排列,然后依次判断每个排列是否符合出栈的规则。

    解答:

     1 #include <iostream>
     2 #include <string>
     3 #include <stack>
     4 
     5 using namespace std;
     6 
     7 void swap(string &s, int i, int j){
     8     auto c = s[i];
     9     s[i] = s[j];
    10     s[j] = c;
    11 }
    12 
    13 //判断是否是出栈顺序
    14 bool isvalid(const string &str, const string &ans){
    15     stack<char> sc;
    16     int i=0, j=0;
    17     while(i<str.size()){
    18         sc.push(str[i++]);
    19         while(!sc.empty() && sc.top()==ans[j]){
    20             sc.pop();
    21             ++j;
    22         }
    23     }
    24     return sc.empty();
    25 }
    26 
    27 //回溯进行全排列
    28 void backtrack(const string &str, string &ans, int a){
    29     int len = str.size()-1;
    30     if(a==len && isvalid(str,ans)){
    31         cout<<ans<<endl;
    32         return ;
    33     }
    34     for(int k=a; k<=len; ++k){
    35         swap(ans,a,k);
    36         backtrack(str,ans,a+1);
    37         swap(ans,a,k);
    38     }
    39 }
    40 
    41 int main(){
    42     string str, ans;
    43     cin>>str;
    44     ans = str;
    45     backtrack(str, ans, 0);
    46     
    47     return 0;
    48 }
  • 相关阅读:
    Chrome DevTools(开发者工具) 全攻略
    vue中使用echarts实现疫情地图
    VUE项目在IE上控台报错,无法进入项目或无法页面跳转
    <script>标签的属性
    CSS实现网页变灰的效果
    HTTP之缓存命中
    HTTP之缓存处理步骤
    HTTP之Web服务器是如何进行工作的!
    HTTP之URL的快捷方式
    HTTP之URL的组成部分
  • 原文地址:https://www.cnblogs.com/tenjl-exv/p/12883417.html
Copyright © 2020-2023  润新知