leetcode第28题

简介: 返回一个字符串 needle 在另一个字符串 haystack 中开始的位置,如果不存在就返回 -1 ,如果 needle 长度是 0 ,就返回 0 。就是一一比较就好,看下代码吧。

image.png

返回一个字符串 needle 在另一个字符串 haystack 中开始的位置,如果不存在就返回 -1 ,如果 needle 长度是 0 ,就返回 0 。

就是一一比较就好,看下代码吧。

publicintstrStr(Stringhaystack, Stringneedle) {
if (needle.length() ==0) {
return0;
    }
intj=0;
//遍历每个字符for (inti=0; i<haystack.length(); i++) {
//相等的话计数加 1 if (haystack.charAt(i) ==needle.charAt(j)) {
j++;
//长度够了就返回if (j==needle.length()) {
returni-j+1;
            }
// 不相等的话 j 清零,// 并且 i 回到最初的位置,之后就进入 for 循环中的 i++,从下个位置继续判断        } else {
i=i-j;
j=0;
        }
    }
return-1;
}

时间复杂度:假设 haystack 和 needle 的长度分别是 n 和 k,对于每一个 i ,我们最多执行 k - 1 次,总共会有 n 个 i ,所以时间复杂度是 O(kn)。

空间复杂度:O(1)。

我们再看下别人的代码,用两个 for 循环。但本质其实是一样的,但可能会更好理解些吧。

publicintstrStr(Stringhaystack, Stringneedle) {
for (inti=0; ; i++) {
for (intj=0; ; j++) {
if (j==needle.length()) returni;
if (i+j==haystack.length()) return-1;
if (needle.charAt(j) !=haystack.charAt(i+j)) break;
    }
  }
}

总的来说,还是比较简单的,就是简单的遍历就实现了。

相关文章
|
7月前
leetcode-472. 连接词
leetcode-472. 连接词
51 0
|
7月前
LeetCode
LeetCode
42 0
|
7月前
|
消息中间件 Kubernetes NoSQL
LeetCode 1359、1360
LeetCode 1359、1360
|
算法 Python
LeetCode 386. Lexicographical Numbers
给定一个整数 n, 返回从 1 到 n 的字典顺序。
88 0
LeetCode 386. Lexicographical Numbers
|
测试技术
一和零(LeetCode-474)
一和零(LeetCode-474)
139 0
一和零(LeetCode-474)
leetcode第37题
从上到下,从左到右遍历每个空位置。在第一个位置,随便填一个可以填的数字,再在第二个位置填一个可以填的数字,一直执行下去直到最后一个位置。期间如果出现没有数字可以填的话,就回退到上一个位置,换一下数字,再向后进行下去。
leetcode第37题
leetcode第55题
当自己按照 45 题的思路写完的时候,看 Solution 的时候都懵逼了,这道题竟然这么复杂?不过 Solution 把问题抽象成动态规划的思想,以及优化的过程还是非常值得学习的。
leetcode第55题
leetcode第33题
问题出在,当数组剩偶数长度的时候,mid = (start + end)/ 2,mid 取的是左端点。上图的例子, mid > end, 更新 start = mid,start 位置并不会变化。那么下一次 mid 的值也不会变,就死循环了。所以,我们要更新 start = mid + 1。 综上,找最小值的下标的代码就出来了,同时,由于我们找的是位置 0 对应的下标,所以偏移就是最小值的下标.
leetcode第33题
leetcode第23题
时间复杂度:假设 N 是所有的数字个数,存到数组是 O(N),排序如果是用快速排序就是 O(Nlog_N)O(NlogN) ,存到链表是 O(N),所以取个最大的,就是 O(Nlog_N)O(NlogN)。 空间复杂度:新建了一个链表,O(N)。
leetcode第23题