题目:【经典算法】LeetCode 20:有效的括号(Java/C/Python3实现含注释说明,Easy)
作者主页: 进朱者赤的博客
精选专栏:经典算法
作者简介:阿里非典型程序员一枚 ,记录在大厂的打怪升级之路。 一起学习Java、大数据、数据结构算法(公众号同名)
❤️觉得文章还不错的话欢迎大家点赞➕收藏⭐️➕评论,支持博主,记得点个大大的
关注
,持续更新
————————————————-
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标(下标从 0 开始)。如果 needle 不是 haystack 的一部分,则返回 -1 。
示例 1:
输入:haystack = "sadbutsad", needle = "sad"
输出:0
解释:"sad" 在下标 0 和 6 处匹配。
第一个匹配项的下标是 0 ,所以返回 0 。
示例 2:
输入:haystack = "leetcode", needle = "leeto"
输出:-1
解释:"leeto" 没有在 "leetcode" 中出现,所以返回 -1 。
提示:
1 <= haystack.length, needle.length <= 104
haystack 和 needle 仅由小写英文字符组成
原题:LeetCode 28. 找出字符串中第一个匹配项的下标
暴力匹配是一种直观的解决方案。我们从字符串s
的第一个字符开始,逐个字符与子串t
进行比较。如果找到一个匹配,就返回当前的索引。如果整个s
都被遍历完了还没有找到匹配,则返回-1。
public class Solution {
public int strStr(String s, String t) {
int m = s.length();
int n = t.length();
for (int i = 0; i <= m - n; i++) {
int j;
for (j = 0; j < n; j++) {
if (s.charAt(i + j) != t.charAt(j)) {
break;
}
}
if (j == n) {
return i;
}
}
return -1;
}
}
说明:
- 外部循环遍历字符串
s
,内部循环遍历子串t
。- 如果在内部循环中发现字符不匹配,则跳出内部循环。
- 如果内部循环正常结束(即
j == n
),说明找到了一个匹配,返回当前的索引i
。
#include
int strStr(char *s, char *t) {
int m = strlen(s);
int n = strlen(t);
for (int i = 0; i <= m - n; i++) {
int j;
for (j = 0; j < n; j++) {
if (s[i + j] != t[j]) {
break;
}
}
if (j == n) {
return i;
}
}
return -1;
}
说明:
- C语言版本与Java版本逻辑相同,只是语法上有所不同。
class So