• 字符串

    定长顺序存储:地址连续、长度固定

    堆存储:地址连续、动态分配空间

    块链存储:

      每个结点可以存放一个字符或者多个字符,结点大小的选择、顺序存储的方式、可能有空间浪费

      

    串的模式匹配算法

    求一个子串在原字符串中首次出现的位置

        public static int subStringIndex(String string,String subString){
            int i=0;
            for(;i<=string.length()-subString.length();i++){
                int j;
                for(j=0;j<subString.length();j++){
                    System.out.println(string.charAt(i) + " " +subString.charAt(j));
                    if(string.charAt(i) == subString.charAt(j)){
                        i++;
                    }else{
                        i = i-j;
                        break;
                    }
                }
                if(j>=subString.length()){
                    break;
                }
            }
            if(i>=string.length()){
                return -1;
            }else{
                return i-subString.length();
            }
            
        }

    改进

    KMP算法

    上述算法,每一次都是从原始字符串的下一个位置开始,从头与模式串进行比较

    KMP算法,在一次匹配过程中,如果某一个字符不一样,不需要从原始串的下一个位置比较,而是将模式串尽可能多地向后移动一段距离

    当匹配失败时,如果主串的第i个字符和模式串的第j个字符匹配失败,不需要将指针i退回到之前的下一位置,而是确定主串中的第i个字符应当与模式串中的哪个字符继续比较(确定下一趟比较中j的位置)

    如何匹配?

    i:指向原字符串

    j:指向模式串

    比较i和j位置上的字符,相等,i++  j++

              不相等,i不变,j = next[j];

                如果此时的next[j]等于0,则需要将i和j都加1;如果此时的next[j]是非0 值,则从i和j的位置开始进行比较

    next[j]的值仅仅取决于模式串本身,构造一个函数,专门用于计算next[j]的值

        public static int[] nextJ(String subString){
            
            int length = subString.length();
            int next[] = new int[length+1];
            next[0] = length;
            int j = 1;
            int k = next[j]; //next[1]=0
            while(j<length){
                if(k==0 || subString.charAt(k-1) == subString.charAt(j-1)){
                    ++k;
                    ++j;
                    next[j] = k;
                }else {
                    k = next[k];
                }
            }     
            return next;
        }
  • 相关阅读:
    win10 UWP button
    内网分享资源
    内网分享资源
    CF724F Uniformly Branched Trees
    win10 UWP FlipView
    win10 UWP FlipView
    win10 UWP FlipView
    搭建阿里云 centos mysql tomcat jdk
    搭建阿里云 centos mysql tomcat jdk
    win10 UWP 申请微软开发者
  • 原文地址:https://www.cnblogs.com/duanjiapingjy/p/9583418.html
Copyright © 2020-2023  润新知