Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/user-interface/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Algorithm 如何使用Stack'组合两个字符串;什么是推送和弹出操作?_Algorithm_Data Structures - Fatal编程技术网

Algorithm 如何使用Stack'组合两个字符串;什么是推送和弹出操作?

Algorithm 如何使用Stack'组合两个字符串;什么是推送和弹出操作?,algorithm,data-structures,Algorithm,Data Structures,如果我有两个字符串,请说str1和str2 str1 = I to cricket chess str2 = like play and 我希望输出为: “我喜欢打板球和下棋” 可以使用stack的push和pop操作来完成此操作。 算法应该独立于编程语言。上面提到的字符串可以 任何长度。根据你所给出的,你必须做出一些假设 假设: 句子中的单词在两个字符串之间交错 一个字符串最多比另一个字符串长一个单词 空格是单词的分隔符 算法如下所示: 对于每个字符串: 在空格字符上将字符串拆分为数组

如果我有两个字符串,请说
str1和str2

str1 = I to cricket chess 

str2 = like play and 
我希望输出为:

“我喜欢打板球和下棋”

可以使用
stack
push
pop
操作来完成此操作。 算法应该独立于编程语言。上面提到的字符串可以
任何长度。

根据你所给出的,你必须做出一些假设

假设:

  • 句子中的单词在两个字符串之间交错
  • 一个字符串最多比另一个字符串长一个单词
  • 空格是单词的分隔符
  • 算法如下所示:

  • 对于每个字符串:
  • 在空格字符上将字符串拆分为数组
  • 查找长度最长的数组
  • 从最长长度的数组开始(称这个为arrayB,另一个为arrayO)
  • 从数组的末尾
  • 将arrayB的元素推到堆栈上
  • 将arrayO的元素推到堆栈上
  • 重复此操作,直到每个阵列中的所有元素都被按下,在两个阵列之间交替进行
  • 完成后,将堆栈弹出到数组中
  • 使用空格作为分隔符,将数组连接到字符串中

  • 这很简单。您只需
    将第一个单词从第一个字符串推送到堆栈中,然后
    将第一个单词从第二个字符串推送到堆栈中,然后对第二个单词执行相同的操作,然后再推到第三个单词等


    之后,您需要
    从堆栈中弹出
    每个元素,并
    将其推送到第二个堆栈中,以反转序列。然后,您只需从第二个堆栈中弹出每个元素,并将其添加到结果字符串中。

    我认为这是一个比我的更好的解决方案,因为您不必维护两个单独的索引来递减,这可能容易出错。我打赌我的方法更节省时间和空间(没有第二个堆栈,也没有对堆栈进行双重遍历),但代价是更容易出错。是的,但是如果使用队列,而不是堆栈,则有可能省略第二个阶段。队列会使这变得微不足道。我认为整个想法是测试OP对后进先出的理解,同时处理解析句子的后进先出性质(即使它被分成两个字符串)。