美文网首页
SundayUtils

SundayUtils

作者: kevinfuture | 来源:发表于2018-09-14 13:39 被阅读0次

Sunday算法果然很容易理解与实现

/**
 * Sunday字符串算法
 * @author kevin
 * **/

public class SundayUtils {

    public static void main(String[] args) {
        System.out.println(indexOf("sdfsdf海贼0王","海贼0"));
    }

    public static String indexOf(String source, String target){
        char[] sourceChars = source.toCharArray();
        char[] targetChars = target.toCharArray();

        int i = 0;
        int j = 0;

        int matchLen = 0;
        while(i < sourceChars.length && j < targetChars.length){
            if(j < 0){
                j = 0;
            }
            if(sourceChars[i] == targetChars[j]){
                if(j > matchLen){
                    matchLen = j;
                }
                i++;
                j++;
            }else{
                //如果不匹配,则主串的索引 : i += targetChars.length - 1 - j + 1; 主串中参加匹配的最末位字符的下一位字符
                i += targetChars.length - j;
                if(i >= sourceChars.length - 1){
                    //不匹配
                    break;
                }
                j = targetChars.length - 1;
                while(j >= 0){
                    if(sourceChars[i] != targetChars[j]){
                        j--;
                    }else{
                        break;
                    }
                }
            }
        }

        //因为sunday算法是从前往后匹配,所以可以根据从前往后的顺序取模式串的长度
        char[] chars = new char[matchLen + 1];
        int m = 0;
        for(int n = 0; n <chars.length; n++){
            chars[m++] = targetChars[n];
        }
        return String.valueOf(chars);

   }

}

相关文章

网友评论

      本文标题:SundayUtils

      本文链接:https://www.haomeiwen.com/subject/isrogftx.html