zoukankan      html  css  js  c++  java
  • leecode刷题(17)-- 实现StrStr

    leecode刷题(17)-- 实现StrStr

    实现StrStr

    描述:

    实现 strStr() 函数。

    给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1

    示例 1:

    输入: haystack = "hello", needle = "ll"
    输出: 2
    

    示例 2:

    输入: haystack = "aaaaa", needle = "bba"
    输出: -1
    

    说明:

    needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。

    对于本题而言,当 needle 是空字符串时我们应当返回 0 。这与C语言的 strstr() 以及 Java的 indexOf() 定义相符。


    思路:

    这道题的原意是让我们的用自己的算法实现 strStr()函数,但我发现使用 indexOf() 是真的快啊 (捂脸)。算了,还是不用这个函数了,我们来自己实现,我想到的只有暴力遍历两个字符串,依次比较是否相等。还有一种是KMP算法,但是自己看的不是很懂,这里就不列出来了。

    说下过程(暴力遍历):

    首先先做判断,如果子字符串是空字符串,那么我们返回 0 。如果子字符串长度大于母字符串,那么我们返回 -1。然后遍历母字符串,不需要遍历整个母字符串,我们只需要遍历到剩下的长度和子字符串相等就好了,提高运算效率。然后对于母字符串的每一个字符,我们再遍历子字符串,一个一个字符对应比较,如果对应位置有不相等的,则跳出循环。如果一直没有跳出循环,则说明比较的字符是相等的,也即子字符串能和母字符串位置对应,这时我们返回起始位置就可以了。

    代码如下:

    public class StrStr {
    	public int strStr(String haystack, String needle) {
    		if (needle.length == 0)	return 0;
    		int m = haystack.length(), n = needle.length();
    		if (m < n) return -1;
    		for (int i = 0; i <= m - n; i++) {
    			int j = 0;
    			for (j = 0; j < n; j++) {
    				if (haystack.charAt(i + j) != needle.charAt(j)) break;
    			}
    			if (j == n) return i;
    		}
    		return -1;
    	}
    }
    

    再说一下使用 indexOf() 的方法:

    代码如下:

    class Solution {
        public int strStr(String haystack, String needle) {
            return haystack.indexOf(needle);
        }
    }
    

    这个函数是真的又快又简单。

  • 相关阅读:
    108. Convert Sorted Array to Binary Search Tree
    107. Binary Tree Level Order Traversal II
    106. Construct Binary Tree from Inorder and Postorder Traversal
    105. Construct Binary Tree from Preorder and Inorder Traversal
    104. Maximum Depth of Binary Tree
    103. Binary Tree Zigzag Level Order Traversal
    102. Binary Tree Level Order Traversal
    系统和进程相关信息
    文件I/0缓冲
    系统编程概念(文件系统mount等函数的使用)
  • 原文地址:https://www.cnblogs.com/weixuqin/p/10422142.html
Copyright © 2011-2022 走看看