思路:
1,把源字符串,制作成一个循环链表(双向)。
2,把目标字符串的首字母,与源字符串对比:
a, 如果存在,则把相等的字符所在链表节点,作为头,依次比较节点剩余部分(双向),是否与目的字符串相等,若相等,则存在方法。(注:可能存在多个节点与目的字符串头相等,一一比较)
b,如果不存在,则不存在方法。
其实看到要求是输出全部可能的答案,就可以猜到,这题考的实际上是图或者树的遍历,栈只是一个存储工具而已。当然,回溯也是有理论上做出来的可能的,不过我没想到好的方法。
我的思路是:建一个二叉树。二叉树的每个结点包含一个栈s,表示目前已在栈中的数据;包含一个字符串input,表示还未进栈的数据;包含一个字符串record,表示从开始走到这步所用的i,o操作序列;包含一个字符串output,表示按照record的操作,应该有的输出;左孩子表示i,右孩子表示o。
程序的过程就是以先序遍历建立二叉树的过程,在建的过程中,每发现一个结点的output的值和目标单词相同时,输出该结点的record。