LeetCode-实现strStr()

LeetCode-实现strStr()

LeetCode-实现strStr()

1 Easy-实现strStr()

1.1 题目描述

实现 strStr() 函数。

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

1.2 示例 1:

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

输出: 2

1.3 示例 2:

输入: haystack = "aaaaa", needle = "bba"

输出: -1

1.4 说明:

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

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

2 自己的答案

2.1 思路

  1. 在haystack字符串中找到与needle[0]相同的字符,从这个字符开始,从haystack中取出与needle长度相同的字符串.
  2. 比较needle和取出的子字符串,如果相同,则返回当前索引.否则不存在,返回-1.
  3. 当needle为空字符串时候,返回0.

2.2 代码

package algorithm.easy;

public class StrStr {
    public static int solution(String haystack, String needle) {
        if (needle.equals("")) {
            return 0;
        }
        int nLen = needle.length();
        for (int i = 0; i < haystack.length(); i++) {
            // 如果needle字符串的第一个字符与haystack的某个位置的字符相同时候
            if (haystack.charAt(i) == needle.charAt(0)) {
                // 取出haystack当前位置起始的,长度与needle相同的子字符串
                // 如果长度超出范围,不存在
                if (i + nLen > haystack.length()) {
                    return -1;
                }
                String compare = haystack.substring(i, i + nLen);
                if (needle.equals(compare)) {
                    return i;
                }
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        String a = "aaaaa";
        String b = "bba";
        String c = "hello";
        String d = "ll";
        System.out.println(solution(a,b));
        System.out.println(solution(c,d));
    }
}

Date: 2018-11-01 16:45

Author: devinkin

Created: 2018-11-01 四 16:45

Validate

posted @ 2018-11-01 16:46  EmacsDevinkin  阅读(637)  评论(0编辑  收藏  举报