中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

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
沁源县| 栾川县| 瓦房店市| 偃师市| 淳化县| 抚顺县| 无锡市| 松滋市| 金华市| 商都县| 黄龙县| 嘉祥县| 乌鲁木齐县| 镇安县| 东明县| 黄骅市| 错那县| 郴州市| 沙河市| 汉川市| 广河县| 乌海市| 屏南县| 雷山县| 淮安市| 枞阳县| 保靖县| 天峻县| 庄浪县| 景东| 阿克陶县| 武乡县| 寿阳县| 长子县| 大名县| 潼关县| 新乡县| 凌源市| 鄂温| 巫山县| 高淳县|