using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace ArrStack { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { //string source = this.textBox1.Text; //string destination = this.textBox2.Text; char [] source = this.textBox1.Text.ToCharArray(); char [] dest = this.textBox2.Text.ToCharArray(); string pcd = ""; Stack<char> code = new Stack<char>(); int m = 0, n = 0; code.Push(source[n++]); pcd += "i"; for (int i = 1; i < 2 * source.Length; i++) { if (code.Count >0&& code.Peek() == dest[m]) { code.Pop(); pcd += "o"; m++; } else { if (n < source.Length) { code.Push(source[n++]); pcd += "i"; } } } if (m == dest.Length ) { this.label1.Text = pcd; } else { this.label1.Text = "No match" + pcd; } } } } 其过程就是不断的入栈出栈操作,这里用的c#