zoukankan      html  css  js  c++  java
  • 字符串

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

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

    块链存储:

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

      

    串的模式匹配算法

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

        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;
        }
  • 相关阅读:
    Pycharm 中的翻译工具
    服务器响应慢问题
    将博客搬至CSDN
    【索引】索引的介绍与优化
    【Java杂记】Equals 和 hashCode
    【Java】JVM(六)虚拟机字节码执行引擎
    【Java】JVM(五)、虚拟机类加载机制
    【Java】JVM(四)、虚拟机参数配置
    【Java】JVM(三)、Java垃圾收集器
    【Java】JVM(二)、Java垃圾收集算法
  • 原文地址:https://www.cnblogs.com/duanjiapingjy/p/9583418.html
Copyright © 2011-2022 走看看