日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

美团--最小唯一前缀

發(fā)布時(shí)間:2024/4/11 编程问答 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 美团--最小唯一前缀 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

美團(tuán)–最小唯一前綴

文章目錄

  • 美團(tuán)--最小唯一前綴
    • 一、問(wèn)題描述
    • 二、分析
    • 三、代碼

一、問(wèn)題描述

給定一組個(gè)字符串,為每個(gè)字符串找出能夠唯一識(shí)別該字符串的最小前綴。

  • 輸入描述:
第一行輸入一個(gè)整數(shù) n 表示字符串個(gè)數(shù) 后面n行,每行一個(gè)字符串,一共n串互不相同的字符串。(2 <= n <= 100, 字符串長(zhǎng)度不超過(guò)100
  • 輸出描述:
輸出n行,每行一個(gè)字符串,依次是每個(gè)字符串的最小可唯一識(shí)別前綴輸入例子1: 5 meituanapp meituanwaimai dianpingliren dianpingjiehun mt輸出例子1: meituana meituanw dianpingl dianpingj mt

二、分析

  • 這個(gè)是經(jīng)典的字典樹(shù)的題目,Trie樹(shù)也稱字典樹(shù),因?yàn)槠湫屎芨?#xff0c;所以在在字符串查找、前綴匹配等中應(yīng)用很廣泛,其高效率是以空間為代價(jià)的。
  • 實(shí)現(xiàn)原理:

利用串構(gòu)建一個(gè)字典樹(shù),這個(gè)字典樹(shù)保存了串的公共前綴信息,因此可以降低查詢操作的復(fù)雜度。

  • Trie樹(shù)詳解:Trie樹(shù)詳解

三、代碼

#include <iostream> #include <vector> #include <string> using namespace std;//Trie樹(shù)節(jié)點(diǎn)結(jié)構(gòu) struct Node {int cnt;//用來(lái)標(biāo)記該字符所在節(jié)點(diǎn)的訪問(wèn)次數(shù)Node* next[26]; //指向26個(gè)小寫的字母 a-z的節(jié)點(diǎn)指針// 對(duì)于最優(yōu)前綴樹(shù)的每個(gè)節(jié)點(diǎn)都要將指針數(shù)組初始化為nullptr, // 每一個(gè)cnt都要初始化為1Node() :cnt(1){for (int i = 0; i < 26; i++){next[i] = nullptr;}} };int main() {Node*root = new Node();int n = 0;cin >> n;vector<string> strs(n);for (int i = 0; i < n; i++){string tmp;cin >> tmp; //對(duì)于每一個(gè)輸入的字符串,就構(gòu)造前綴樹(shù),加入七十中strs[i] = tmp;Node* p = root;for (int j = 0; j < tmp.size(); j++){if (p->next[tmp[j] - 'a'] != nullptr) // 節(jié)點(diǎn)的下一個(gè) next[tmp[j] - 'a']不為空{p->next[tmp[j] - 'a']->cnt++; // 對(duì)這個(gè)節(jié)點(diǎn)的標(biāo)記值 cnt++}else{p->next[tmp[j] - 'a'] = new Node(); //創(chuàng)建新的節(jié)點(diǎn)}p = p->next[tmp[j] - 'a']; // 將指針指向 下一個(gè)節(jié)點(diǎn)}}for (int i = 0; i < n; i++){Node* p = root;int j = 0;for (; j < strs[i].size(); j++){if (p->next[strs[i][j] - 'a']->cnt == 1){cout << strs[i].substr(0, j + 1) << endl; // 輸處從頭結(jié)點(diǎn)到 cnt=1位置的整個(gè)字符break;}p = p->next[strs[i][j] - 'a'];}if (j == strs[i].size()) // 代表整個(gè)字符串才是唯一可區(qū)分的{cout << strs[i] << endl;}}return 0; }

總結(jié)

以上是生活随笔為你收集整理的美团--最小唯一前缀的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。