数据结构——串和kmp算法

  1. 定义:是由零个或者多个字符组成的有限序列。
  2. 串的顺序存储:a.每一个单元只存一个字符,称为非紧缩格式(存储密度小)。
  3.                          b.一个单元存放多个字符,称为紧缩格式(存储密度大)。
  4. 串的连式存储:
    1. 一个节点可以存储多个字符,通常将链表中每个节点所存储的字符个数称为节点大小。

 

KMP算法与BF算法

题目:

【题意】 有两个字符串SA和SB,SA是母串,SB是子串,问子串SB是否在母串SA中出现过。
 如果出现过输出第一次出现的起始位置和结束位置,否则输出"NO" 
【输入文件】 第一行SA(1 <= 长度 <= 100 0000) 
第二行SB(1 <= 长度 <= 1000) 
【输出文件】 如果SB在SA中出现过输出第一次出现的起始位置和结束位置,否则输出"NO" 
【样例1输入】 aaaaabaa aab
【样例1输出】 4 6 
【样例2输入】 aaaaabaa aax 
【样例2输出】 NO

使用偷懒BF算法:

/**
	 * 第一种方法:穷举法BP
	 */
	public static void firstWay(String SA, String SB) {
		int start = 0;
		int end = 0;
		for (int i = 0; i < SA.length(); i++) {
			if (SA.length() - i >= SB.length()) {
				String substring = SA.substring(i, i + SB.length());
				if (substring.equals(SB)) {
					start = i;
					end = i + SB.length();
					System.out.println(start + " " + end);
				}
			}
		}
		if (start == 0 && end == 0) {
			System.out.println("NO");
		}
	}

直接借用了String的方法,其实并没有感觉有练到穷举orz虽然思路差不多。甚至觉得这个就是KMP算法的一种?????????????我果然还是没有理解透彻。

 

KMP算法:

你可能感兴趣的:(数据结构)