zoukankan      html  css  js  c++  java
  • 字符串——算法系列

    计算机上的非数值处理的对象基本上是字符串数据,所以很有必要专门学习一下串。

    串的逻辑结构和线性表极为相似,区别在于串的数据对象约束为字符集。操作通常针对串的整体,如在串中查找某个子串。

    串的最小操作集

    • 串赋值
    • 串比较
    • 求串长
    • 串联接
    • 求子串

    串的表示与实现

    • 定长顺序存储表示
    • 堆分配存储表示(实现存储长度的动态增长)
    • 块链存储表示

    串的模式匹配算法

    基本的匹配代码

    #include <stdio.h>
    #include <stdlib.h>
    
    int my_length(char* string)
    {
        char * end = string;
        while(*end != '\0')
            end++;
        return end - string;
    }    
    
    int my_index(char *src,char *key)
    {
        int i = 0;
        int j = 0;
        while(i <= my_length(src))
        {
            //比较子串
            if(src[i] == key[j])
            {
                i++,j++;
                if(j == my_length(key))
                    break;
            }
            else
            {
                i = i - j + 1;
                j = 0;
            }    
        }    
        if(j == my_length(key))
        return i - j;
        else return 0;
    }    
    
    int main(int argc, char *argv[])
    {
        char string[] = "ABCFAUIERLFDAABEDJKJLJLD";
        printf("%d\n",my_index(string,"ABCD"));
      system("PAUSE");    
      return 0;
    }

     这种算法很容易理解,不过在最坏的情况下的复杂度为Ο(n*m),n和m分别为主串和子串的长度

    下面是KMP改进算法的实现,主要思想是,不匹配时,主串的游标不回溯,而是用子串的next函数来确定下一步怎么做。

  • 相关阅读:
    记我安装Caffe的血泪史(1)
    UWP连接mysql 实现数据远程备份
    数据库性能测试
    性能瓶颈分析定位
    系统安全性测试
    WEB安全性测试点
    jmeter测试报告分析
    Linux常用命令大全
    软件测试入门到飞升上仙之客户端
    软件测试入门到飞升上仙之web 端测试
  • 原文地址:https://www.cnblogs.com/7ants/p/2994631.html
Copyright © 2011-2022 走看看