コンテンツ:
回文とは、「abba」と「abdba」はどちらも回文ですが、「good」は回文ではありません。与えられた文字ベクトルが回文かどうかを判断するアルゴリズムを書いてみてください。
ステップ:
アルゴリズムの分析:
パリンドローム数列とは、順読みと逆読みが同じ数列、つまり数列とその逆数列を比較する数列のことで、スタックは先入れ後出し、正数列入力、逆数列出力の特徴を持っているだけなので、スタックを使用してこの問題を解決できます。
配列スタックを使用して、判定対象の文字列の半分を取得してスタックに置き、スタックからポップして、出力シーケンスの前半が逆順になるようにし、比較するだけで済みます。スタックにプッシュされていない残りの文字と文字列シーケンスを比較し、1 対 1 の対応があれば回文シーケンスです。
コードは以下のように表示されます:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
typedef struct Stack //定义数组栈
{
int top;
char str[100];
}STACK;
int main()
{
int len,i,mid,next;
char str[100];
STACK s;
s.top=0;
gets(str); //输入字符串
len=strlen(str); //求字符串的长度
mid=len/2; //取字符串中间位置
for(i=0;i<mid;i++) //一半字符串入栈
{
s.str[s.top]=str[i];
s.top++;
}
if(len%2!=0) //字符串长度为奇数时,后半段字符串从中间位置+1开始
{
next=mid+1;
}else //否则,后半段字符串从中间位置开始
{
next=mid;
}
while(s.top!=0)
{
if(s.str[s.top-1]==str[next])//前半段的最后一个字符与后半段的第一个字符相等,继续比较
{
s.top--;
next++;
}
else
{
break;
}
}
if(s.top==0)
{
printf("是回文\n");
}
else
{
printf("不是回文\n");
}
return 0;
}
操作結果: