程序员书籍笔记 程序员书籍笔记
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • HTML
  • CSS
  • JavaScript
  • 前端知识
  • Vue
  • MarkDown
  • git
  • Node.js
  • Linux
  • 51单片机
  • 四级
  • 第一学期课程
  • 操作系统
  • 计算机网络
  • 数据结构
  • 计算机组成原理
  • HTML5
  • Electron
  • 日记便签
  • 前端导航
GitHub (opens new window)
  • 四级

  • ======第一学期======

  • 大学英语

  • 数据结构

    • 每周作业
    • 顺序链表课程设计报告
    • 学生管理dos版1.0
    • lesson7

      • 作业
        • 作业
        • 解析
        • 代码
        • 运行结果
  • github英语

  • 软考专题

  • 学业和英语
  • 数据结构
  • lesson7
yuadh
2022-05-22
目录

作业

# 作业

字符串前缀和后缀的最大公共长度

前缀是指 不包括字符串最后一位的任意字符串 后缀是指 不包括字符串最开始一位的任意字符串

# 解析

abcdabd

子串 前缀 后缀 最大公共长度
a a a 0
ab a b 0
abc a、ab bc、c 0
abcd a、ab、abc bcd、cd、d 0
abcda a、ab、abc、abcd bcda、cda、da、a 1
abcdab a、ab、abc、abcd、abcda bcdab、cdab、dab、ab、b 2
abcdabd a、ab、abc、abcd、abcda、abcdab bcdabd、cdabd、dabd、abd、bd、d 0

# 代码

#include <stdio.h>
#include <string.h>

int StrEach[100];
int loadStrA(char *str,int len){
  StrEach[0] = 0;//
  int i=0,j=0;
  for(j = 1;j < len;j++){
    while(str[i]!=str[j]&&i>0){
      i = StrEach[i-1];
    }
    if(str[i]==str[j]){
      i++;
      StrEach[j] = i;
    }else{
      StrEach[j]=0;
    }
  }
}
int getStrLen(char *str){
  int i = 0;
  while(str[i++]);
  return i-1;
}

int main(){
  char *str="abcdabd";
  int len = getStrLen(str);
  loadStrA(str,len);
  for(int i =0;i<len;i++){
    printf("%d ",StrEach[i]);
  }
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 运行结果

//console
0 0 0 0 1 2 0 
1
2
编辑 (opens new window)
上次更新: 2023/02/07, 14:51:48
学生管理dos版1.0
Get Started

← 学生管理dos版1.0 Get Started→

Theme by Vdoing | Copyright © 2021-2023 yuadh
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式
×