小鬼之家

流浪,游走于文明与原始之间. 关注底层技术,实现美好生活。QQ: 886988

  博客园 :: 首页 :: 联系 :: 订阅 订阅 :: 管理
  54 Posts :: 0 Stories :: 61 Comments :: 1 Trackbacks

因为在做大文件上传的分析中需要用到一段字符串的匹配算法,所以重新学习了一次KMP算法.

        private int[] GetNextVal(string t)
        
{
            
int j = 0, k = -1;
            
int[] nextVal =  new int[t.Length];

            nextVal[
0= -1;

            
while (j < t.Length-1)
            
{
                
if (k == -1 || t[j] == t[k])
                
{
                    j
++;
                    k
++;
                    
if (t[j] != t[k])
                    
{
                        nextVal[j] 
= k;
                    }

                    
else
                    
{
                        nextVal[j] 
= nextVal[k];
                    }

                }

                
else
                
{
                    k 
= nextVal[k];
                }

            }


            
return nextVal;
        }


        private int KmpIndexOf(string s, string t)
        
{
            
int i = 0, j = 0, v;
            
int[] nextVal = GetNextVal(t);

            
while (i < s.Length && j < t.Length)
            
{
                
if (j == -1 || s[i] == t[j])
                
{
                    i
++;
                    j
++;
                }

                
else
                
{
                    j 
= nextVal[j];
                }

            }


            
if (j >= t.Length)
                v 
= i - t.Length;
            
else
                v 
= -1;

            
return v;
        }
posted on 2008-06-28 23:00 黄志强 阅读(26) 评论(0)  编辑 收藏 所属分类: C#算法

标题  
姓名  
主页
Email (只有博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-06-29 22:28 编辑过
 
 


小鬼之家