子串分值(藍橋)

2021-10-21 20:01:18 字數 1146 閱讀 5489

【問題描述】

對於乙個字串 s,我們定義 s 的分值 f(s) 為 s **現的不同的字元個 數。

例如 f(」aba」) =2,f(」abc」) = 3, f(」aaa」) = 1。

現在給定乙個字串 s[0…n−1](長度為 n),

請你計算對於所有 s的非空 子串 s[i…j](0≤i≤ j < n),f(s[i…j]) 的和是多少。

【輸入格式】

輸入一行包含乙個由小寫字母組成的字串 s。

【輸出格式】

輸出乙個整數表示答案。

【樣例輸入】

ababc

【樣例輸出】 28

【樣例說明】

子串 f值

a 1ab 2

aba 2

abab 2

ababc 3

b 1ba 2

bab 2

babc 3

a 1ab 2

abc 3

b 1bc 2

c 1【評測用例規模與約定】

對於 20% 的評測用例,1≤n≤10;

對於 40% 的評測用例,1≤n≤100;

對於 50% 的評測用例,1≤n≤1000;

對於 60% 的評測用例,1≤n≤10000;

對於所有評測用例,1≤n≤100000。

1 . 採用的資料結構為hashset,由於其元素互異,在新增時可以做到去重操作

2 . 分割成子串

3 . 將子串中字母新增至set中

(注意由於泛型當中無有關char的包裝類,新增進去的字母需要以字串形式存在)

(這裡在字元後加入空字串轉化為字串)

4 . 此時hashset裡的元素互異f(string)=hashset.size()

public

class 子串分值

}for

(int i =

0; i < k; i++

) sum=sum+set.

size()

;}system.out.

println

(sum);}

}

藍橋杯子串分值和

樣例說明 樣例說明 子串 f值 a 1ab 2 aba 2 abab 2 ababc 3 b 1ba 2 bab 2 babc 3 a 1ab 2 abc 3 b 1bc 2 c 1n 100 思路對字串的所有子串進行遍歷,同時對子串進行去重操作。include include using name...

藍橋杯省賽 子串分值和(舉例子詳解)

分析每個字母的共獻度 include using namespace std typedef long long ll const int n 1e6 10 char s n ll vis 40 int main cout ans endl return0 aba a ab aba b ba a 9...

藍橋杯大賽 每日一題(1 子串分值)

問題描述 對於乙個字串s,我們定義s的分值f s 為s中恰好出現一次的字元個數。例如f aba 1,f abc 3,f aaa 0。現在給定乙個字串s 0 n 1,請你計算對於所有s的非空子串s i j 0 is j 這道題咋說呢,我開始看的時候感覺很難,但是只要你理解了感覺也很簡單了 我開始想到的...