zoukankan      html  css  js  c++  java
  • [LeetCode] Implement strStr()

    代码:

    暴力算法

     1 class Solution {
     2 public:
     3     int strStr(char *haystack, char *needle) {
     4         if (!*needle)
     5             return 0;
     6         int alen = strlen(haystack);
     7         int blen = strlen(needle);
     8         int i = 0, j = 0;
     9         while (i < alen && j < blen) {
    10             if (haystack[i] == needle[j]) {
    11                 i++;
    12                 j++;
    13             } else {
    14                 i = i - j + 1;
    15                 j = 0;
    16             }
    17         }
    18         if (j == blen) {
    19             return i - j;
    20         } else {
    21             return -1;
    22         }
    23     }
    24 };

    KMP算法

     1 class Solution {
     2 public:
     3     int strStr(char *haystack, char *needle) {
     4         return kmp(haystack, needle);
     5     }
     6 private:
     7     int kmp(const char *text, const char *pattern) {
     8         int i = 0;
     9         int j = 0;
    10         const int n = strlen(text);
    11         const int m = strlen(pattern);
    12         int *next = (int*)malloc(sizeof(int)* m);
    13         compute_prefix(pattern, next);
    14 
    15         while (i < n && j < m) {
    16             if (j == -1 || text[i] == pattern[j]) {
    17                 i++;
    18                 j++;
    19             } else {
    20                 j = next[j];
    21             }
    22         }
    23 
    24         free(next);
    25         if (j == m)
    26             return i - j;
    27         else
    28             return -1;
    29     }
    30 
    31     void compute_prefix(const char *pattern, int next[]) {
    32         int i = 0;
    33         int j = -1;
    34         const int m = strlen(pattern);
    35         next[0] = -1;
    36 
    37         while (i < m - 1) {
    38             if (j == -1 || pattern[i] == pattern[j]) {
    39                 i++;
    40                 j++;
    41                 if (pattern[i] != pattern[j])
    42                     next[i] = j;
    43                 else
    44                     next[i] = next[j];
    45             }
    46             else {
    47                 j = next[j];
    48             }
    49         }
    50     }
    51 };

    杂记:

    参考:http://blog.csdn.net/v_july_v/article/details/7041827

  • 相关阅读:
    数据库中Schema(模式)概念的理解
    debug --- 使用Eclipse
    pgsql 相关函数
    浏览器显示页面排版错误
    jqury 属性
    节点互换需要克隆
    mysql数据库允许远程访问
    request与response的编码和解码
    文本和属性 radio,checkbox,select
    js 和 JQuery 获取iframe的父子值
  • 原文地址:https://www.cnblogs.com/Azurewing/p/4311819.html
Copyright © 2011-2022 走看看