回文算法

     回文:针对于字符串的中间位置两边对应位置相等。对于长度为n的字符串,需要比较的次数为N/2。

     用2种方法对该应用实现算法如下:

1:采用字符串的substring对位置为i和n-j-i的字符进行比较,如果其中一个不相等就返回flase.此方法性能会稍微差一点.

2: 采用泛型队列和栈的特性:FIFO LIFO.此种方法性能最佳,算法复杂度O(N)。

 

ExpandedBlockStart.gif 代码
 1  using  System.Collections.Generic;
 2 
 3  public   partial   class  DataStruct_HuiWenSample : System.Web.UI.Page
 4  {
 5       protected   void  Page_Load( object  sender, EventArgs e)
 6      {
 7         //  bool bl= CheckStringRelativeEqual("ABCDEDCBA");
 8         //  Response.Write(bl.ToString());
 9          bool  blSQ  =  CheckStringRelativeEqualStackQueue( " ABuDEDCBA " );
10         Response.Write(blSQ.ToString());
11       
12      }
13 
14     
15       private   bool  CheckStringRelativeEqualStackQueue( string  inputString)
16      {
17           char [] charCompare  =  inputString.ToCharArray();
18          Stack < char >  stack  =   new  Stack < char > ();
19          Queue < char >  queue  =   new  Queue < char > ();
20           bool  justfy = true ;
21           try
22          {
23               for  ( int  i  =   0 ; i  <  inputString.Length; i ++ )
24              { // 压入相应的栈和队列
25                  stack.Push(charCompare[i]);
26                  queue.Enqueue(charCompare[i]);
27              }
28               for  ( int  i  =   0 ; i  <  inputString.Length; i ++ )
29              {
30                   if  (stack.Pop()  !=  queue.Dequeue())
31                  {
32                      justfy  =   false ;
33                  }
34              }
35          }
36           catch
37          {
38              justfy  =   false ;
39          }
40           finally
41          { 
42          
43          }
44           return  justfy;
45      }
46 
47       private   bool  CheckStringRelativeEqual( string  inputString)
48      {
49           // inputString.Substring();
50           // string[] charSam = inputString.
51           int  j  =  inputString.Length;
52           bool  bl  =   true ;
53           try
54          {
55               if  (j  >   0 )
56              {
57                   for  ( int  i  =   0 ; i  <  j  /   2 ; i ++ )
58                  {
59                       if  (inputString.Substring(i, 1 ) == inputString.Substring(j - i - 1 , 1 ))
60                      { // 判断对应的位置字符是否相等
61                          //  bl = true;
62                      }
63                       else
64                      {
65                          bl  =   false ;
66                      }
67                  }
68              }
69          }
70           catch     
71          {
72               return   false ;
73          }
74           finally  
75          {
76               
77          }
78           return  bl;
79      }
80  }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值