2023数据结构考研复习-串

Posted ZSYL

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2023数据结构考研复习-串相关的知识,希望对你有一定的参考价值。

2023数据结构考研复习-串(四)

串的定义

#define MaxLen 255
typedef struct 
    char ch[MaxLen];  // 定长顺序表存储
    int length;
 string;

// 动态分配
typedef struct 
    char *ch;  // 按照串长度分配存储区,ch指向串的基地址
    int length;
 string;

// 链式存储
typedef struct 
    char ch[4];  // 每个节点存多个字符
    struct Node * next;  // 指针大小是4字节
 string;

bool substring(SStirng &sub, SString S, int pos, int len) 
    if (pos+len-1 > S.length)
        return 0;
    for (int i = pos; i < pos + len; i++) 
        sub.ch[i-pos+1] = s.ch[i];
    
    return 1;

int strCompare(SString S, SString T) 
    for (int i = 1; i <= S.length && i <= T.length; i++) 
        if (S.ch[i] != T.ch[i])
            return S.ch[i] - T.ch[i];
    
    return S.length - T.length;


int index(SString S, SString T) 
    int i = 1, n = length(S), m = length(T);
    SString sub;
    while (i <= n-m+1) 
        substring(sub, S, i ,m);
        if (strCompare(sub, T) != 0)
            i++;
        else
            return i;
    
  
    return 0;

朴素匹配

int index (String s, String t) 
    int i = 1. j = 1;
    while (i <= s.length && j <= t.length) 
        if (s[i] == t[j]) 
            i++;
            j++;
         else 
            i = i - j + 2;
            j = 1;
        
    
    if (j > t.length)
        return i - t.length;
    else
        return 0;

int index (String s, String t) 
    int i = 1. j = 1;
    for (int i = 0; i < s.length; i++) 
        bool falg = 1;
        for (int j = 0; j < t.length; j++) 
            if (s[i+j] != t[j]) 
                flag = 0;
                break;
            
        
        if (flag)
            return i;
    
    return -1;

KMP

int kmp (Stirng S, String T, int next[]) 
    int i = 1, j = 1;
    while (i <= S.length && j <= T.length) 
        if (S[i] == S[j]) 
            i++;
            j++;
         else 
            j = next[j];  // 模式串向右移动
        
     
    if (j > T.length)
        return i - T.length;
    else
        return 0;

int[] getNext(String s) 
    int next[s.length+1];
    i = 0, j = -1;
    next[0] = -1;
    while (i < s.length) 
        if (j == -1 || s[i] == s[j]) 
            i++;
            j++;
            next[i] = j;
         else 
            j = next[j];
        
    

// 优化
void get_nextval(String T, int nextval[]) 
    int i = 1, j = 0;
    nextval[1] = 0;
    while (i < T.length) 
        if (j == 0 || T[i] ==T[j]) 
            i++;
            j++;
            if (T[i] != T[j])
                nextval[i] = j;
            else
                nextval[i] = nextval[j];
         else 
            j = nextval[j];
        
    

KMP应用

【冬令营 Winter Camp】字符串专题(Triple语言版)
LeetCode 28. 实现 strStr() 字符串匹配(BP&KMP)


加油!

感谢!

努力!

以上是关于2023数据结构考研复习-串的主要内容,如果未能解决你的问题,请参考以下文章

2023数据结构考研复习-排序

2023数据结构考研复习-排序

2023数据结构考研复习-栈队列和数组

2023数据结构考研复习-栈队列和数组

2023数据结构考研复习-图

2023数据结构考研复习-图