- 首先利用数组模拟栈,来判断回文,理解先进后出的思想。所谓回文就是一个正读或反读都相同的字符序列。
代码如下:
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();//获取键盘输入
reversePhrease(input);
}
public static void reversePhrease(string input)
{
int mid = input.Length / 2 - 1;//如果一个字符是回文,那么它必须是中间对称。设置中间下标。
int top = 0, next;
int[] beforeMid = new int[100];//创建一个新的数组
//把输入值的前半段初始化,依次放入数组
for(int i =0;i<=mid;i++)
{
beforeMid[++top] = input[i];
}
if (input.Length % 2 == 0)
{
next = mid + 1;//设置后半段下标
}
else
next = mid + 2;//设置后半段下标
//利用栈的思想,先进后出来对比前后半段的数组
for (int i = next;i< input.Length;i++)
{
if (input[i] == beforeMid[top])
top--;
}
if(top == 0)
{
Console.WriteLine("回文");
}
else
Console.WriteLine("不是回文");
}
}
- 直接使用栈(stack)来判断回文
class Program
{
static void Main(string[] args)
{
string input = Console.ReadLine();//获取键盘输入
reversePhrease(input);
}
public static void reversePhrease(string input)
{
//如果直接使用栈
Stack st = new Stack();
int mid = input.Length / 2 - 1, next;
//初始化stack,把Input的前半段装进stack
for (int i = 0; i <= mid; i++)
{
st.Push(input[i]);
}
if (input.Length % 2 == 0)
{
next = mid + 1;
}
else
next = mid + 2;
//利用栈的思想,先进后出来对比前后半段的数组
while(st.Count !=0)
{
for (int i = next; i < input.Length; i++)
{
bool guess = st.Pop().Equals(input[i]);//调用Stack的静态方法Pop()
if (guess == false)
{
Console.WriteLine("不是回文");
return;
}
}
Console.WriteLine("是回文");
}
}
}
3.验证一下