zoukankan      html  css  js  c++  java
  • Leetcode: Implement strStr()

    Implement strStr().
    
    Returns a pointer to the first occurrence of needle in haystack, or null if needle is not part of haystack.

    暴力法

    复杂度

    时间 O(N^2) 空间 O(N)因为用了一个临时string存

    思路

    本题有很多高级算法可以在O(N)时间内解决问题,然而这已经超出面试的范畴。本题在面试中出现的作用就是考察基本的编程素养,以及边界条件的考虑。我们用暴力法即可。

     1 public class Solution {
     2     public int strStr(String haystack, String needle) {
     3         if (haystack==null || needle==null) return -1;
     4         for (int i=0; i<=haystack.length()-needle.length(); i++) {
     5             String temp = haystack.substring(i, i+needle.length());
     6             if (temp.equals(needle)) {
     7                 return i;
     8             }
     9         }
    10         return -1;
    11     }
    12 }

    若要用O(1)的space,就一个一个比:

     1 public class Solution {
     2     public int strStr(String haystack, String needle) {
     3       for (int i = 0; i<=haystack.length()-needle.length(); i++) {
     4         for (int j = 0; ; j++) {
     5           if (j == needle.length()) return i;
     6           if (needle.charAt(j) != haystack.charAt(i + j)) break;
     7         }
     8       }
     9       return -1;
    10     }
    11 }

    推荐:

     1 public class Solution {
     2     public int strStr(String haystack, String needle) {
     3         int start = 0;
     4         // 如果剩下的字母不够needle长度就停止遍历
     5         while(start <= haystack.length() - needle.length()){
     6             int i1 = start, i2 = 0;
     7             while(i2 < needle.length() && haystack.charAt(i1)==needle.charAt(i2)){
     8                 i1++;
     9                 i2++;
    10             }
    11             if(i2 == needle.length()) return start;
    12             start++;
    13         }
    14         return -1;
    15     }
    16 }

    KMP 参https://segmentfault.com/a/1190000003707284

  • 相关阅读:
    操作系统复习
    Google hack语法
    c++的set重载运算符
    华为笔试题
    Flume+Kafka整合
    kafka相关知识点总结
    kafka中生产者和消费者API
    Kafka集群环境搭建
    Storm消息容错机制(ack-fail机制)
    Storm通信机制(了解)
  • 原文地址:https://www.cnblogs.com/EdwardLiu/p/3983063.html
Copyright © 2011-2022 走看看