小鬼之家

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

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

因为在做大文件上传的分析中需要用到一段字符串的匹配算法,所以重新学习了一次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   黄尚  阅读(348)  评论(0编辑  收藏  举报
努力加载评论中...
点击右上角即可分享
微信分享提示