题目

给定一个字符串 str 和一个子串 subStr,需要在字符串 str 中找到第一个匹配子串 subStr 的位置,并返回其下标。如果子串不存在于字符串中,则返回 -1。

引言

找出字符串中第一个匹配项的下标问题需要考虑字符串的匹配和遍历的逻辑。我们可以使用暴力匹配的方法来解决这个问题,逐个字符地比较字符串和子串。解决这个问题需要对字符串进行匹配和遍历操作。

算法思路

我们将使用暴力匹配的方法来解决找出字符串中第一个匹配项的下标问题。

算法的步骤如下:

  1. 获取字符串 str 和子串 subStr 的长度。
  2. 遍历字符串 str ,从第一个字符开始,直到 str 的长度减去 subStr 的长度:

    • 在每个位置上,比较字符串 str 的子串(长度与 subStr 相等)和子串 subStr 是否相等。
    • 如果相等,返回当前位置作为第一个匹配项的下标。
  3. 如果遍历结束后仍然没有找到匹配项,返回 -1。

代码实现

下面是使用C语言实现的代码:

#include <stdio.h>
#include <string.h>

int findFirstMatchIndex(char* str, char* subStr) {
    int strLen = strlen(str);
    int subStrLen = strlen(subStr);

    for (int i = 0; i <= strLen - subStrLen; i++) {
        int j;
        for (j = 0; j < subStrLen; j++) {
            if (str[i + j] != subStr[j]) {
                break;
            }
        }
        if (j == subStrLen) {
            return i;
        }
    }

    return -1;
}

int main() {
    char str[] = "Hello, world!";
    char subStr[] = "world";

    int index = findFirstMatchIndex(str, subStr);

    printf("String: %s\n", str);
    printf("Substring: %s\n", subStr);

    if (index != -1) {
        printf("First match found at index: %d\n", index);
    } else {
        printf("Substring not found\n");
    }

    return 0;
}

算法分析

该算法需要对字符串进行一次遍历,并在每个位置上进行字符串匹配,所以时间复杂度为 O(n * m),其中 n 是字符串 str 的长度,m 是子串 subStr 的长度。

空间复杂度为 O(1),算法只使用了常数级别的额外空间。

示例和测试

示例输入:

String: Hello, world!
Substring: world

示例输出:

First match found at index: 7

总结

本文使用C语言实现了解答找出字符串中第一个匹配项的下标问题的代码。通过使用暴力匹配的方法,我们能够在字符串中找到第一个匹配的子串,并返回其下标位置。该算法的时间复杂度为 O(n * m),空间复杂度为 O(1)。

标签: 编程算法, 编程算法题, 编程算法大全, 编程算法流程, 算法设计与分析, 数据结构与算法, 算法优化, 算法实现, 常见编程算法, 编程算法入门, 编程算法进阶, 编程算法精通