91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

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
陕西省| 石嘴山市| 伊金霍洛旗| 杂多县| 土默特左旗| 灌云县| 济源市| 介休市| 和平县| 包头市| 安岳县| 塔河县| 武宣县| 东乡| 永春县| 边坝县| 密山市| 大埔县| 玛沁县| 仪征市| 石门县| 湖南省| 玉门市| 正定县| 磐石市| 文水县| 新巴尔虎右旗| 从江县| 宣汉县| 桓仁| 江北区| 广德县| 南靖县| 巴彦淖尔市| 定州市| 响水县| 临武县| 鄂托克旗| 五原县| 加查县| 扎赉特旗|