亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

c語言如何查找非重復子串個數

小億
84
2024-06-05 13:56:25
欄目: 編程語言

要查找一個字符串中非重復子串的個數,可以使用一個哈希表來記錄每個字符最后出現的位置,然后使用滑動窗口的方法來遍歷整個字符串。

具體步驟如下:

  1. 初始化一個哈希表,用來記錄每個字符最后出現的位置,初始值為-1。
  2. 定義一個變量count來記錄非重復子串的個數,初始值為0。
  3. 使用兩個指針i和j來構建滑動窗口,初始時i和j均指向字符串的開頭。
  4. 遍歷字符串,將當前字符更新到哈希表中,并將j指針向右移動。
  5. 如果當前字符在哈希表中的位置大于等于i,說明當前字符在滑動窗口中已經出現過,需要更新i指針為當前字符上一次出現的位置的下一個位置。
  6. 更新count為當前滑動窗口的長度。
  7. 返回count作為非重復子串的個數。

下面是使用C語言實現的代碼示例:

#include <stdio.h>

int nonRepeatSubstringCount(char* s) {
    int lastPos[128]; // 記錄每個字符最后出現的位置
    int i, j, count;
    
    for (i = 0; i < 128; i++) {
        lastPos[i] = -1;
    }
    
    i = 0;
    j = 0;
    count = 0;
    
    while (s[j] != '\0') {
        if (lastPos[s[j]] >= i) {
            i = lastPos[s[j]] + 1;
        }
        
        lastPos[s[j]] = j;
        
        count += j - i + 1;
        
        j++;
    }
    
    return count;
}

int main() {
    char str[] = "abcabcbb";
    int count = nonRepeatSubstringCount(str);
    
    printf("Non-repeating substring count: %d\n", count);
    
    return 0;
}

以上代碼示例中,非重復子串的個數為9,分別為"abc", “bca”, “cab”, “abc”, “bc”, “b”, “ca”, “ab”, “abc”。

0
鸡泽县| 安多县| 吴堡县| 乐山市| 青神县| 哈巴河县| 芮城县| 柳江县| 淮阳县| 安福县| 徐州市| 平塘县| 安平县| 临武县| 绍兴市| 黄龙县| 酉阳| 封开县| 广河县| 南和县| 无棣县| 金昌市| 新龙县| 麻江县| 江口县| 始兴县| 常宁市| 都匀市| 新野县| 龙游县| 清苑县| 镇安县| 神农架林区| 靖远县| 靖江市| 宁晋县| 甘泉县| 赣州市| 武清区| 临桂县| 昌吉市|