今日頭條演算法題-求句子中相同單詞的個數
給定一個英文段落(包含 n 個句子)和 m 次查詢,每次給定一個句子,求段落中相同單詞數量最多的句子。各個英文句子不包含標點,大小寫不敏感。
#include<iostream> #include<vector> #include<string> #include<algorithm> #include<stdio.h> using namespace std; vector<vector<string>> seqsToWords(vector<string> seq){ vector<vector<string>> dic; for (int i = 0; i < seq.size(); i++){ vector<string> words; int previous = 0; string temp; for (int j = 0; j < seq[i].size(); j++){ if (seq[i][j] == ' '){ temp = seq[i].substr(previous, j - previous); auto it = find(words.begin(), words.end(), temp); if (it != words.end()){ words.push_back(temp); } previous = j + 1; } } temp = seq[i].substr(previous, seq[i].size() - previous); auto it = find(words.begin(), words.end(), temp); if (it != words.end()){ words.push_back(temp); } dic.push_back(words); } return dic; } int findSameNumber(vector<vector<string>> dic, vector<string> queryWords){ int maxNumber=0; int index = 0; for (int i = 0; i < dic.size(); i++){ int number = 0; for (int j = 0; j < queryWords.size(); j++){ auto it = find(dic[i].begin(), dic[i].end(), queryWords[j]); if (it != dic[i].end()){ number++; } } if (number > maxNumber) { maxNumber = number; index = i; } } return index; } vector<string> solve(vector<string> seq, vector<string> query){ vector<string> result; vector<vector<string>> dic; vector<vector<string>> queryWords; dic = seqsToWords(seq); queryWords = seqsToWords(query); for (int i = 0; i < queryWords.size(); i++){ int index = findSameNumber(dic, queryWords[i]); result.push_back(seq[i]); } return result; } int main() { int n; vector<string> seqs; cin >> n; int m; vector<string> query; cin >> m; string temp; getline(cin, temp);//讀取第一行的換行符 for (int i = 0; i < n; i++){ getline(cin,temp); seqs.push_back(temp); } for (int i = 0; i < m; i++){ getline(cin, temp); query.push_back(temp); } vector<string> result = solve(seqs,query); for (int i = 0; i < m; i++){ cout << result[i] << endl; } return 0; }
相關推薦
今日頭條演算法題-求句子中相同單詞的個數
給定一個英文段落(包含 n 個句子)和 m 次查詢,每次給定一個句子,求段落中相同單詞數量最多的句子。各個英文句子不包含標點,大小寫不敏感。 #include<iostream> #include<vector> #include<string
資料結構演算法題/求陣列中大小最接近的兩個元素的差
考慮下面這個演算法,它求的是數值陣列中大小最接近的兩個元素的差。 可對比看下求陣列中兩個元素差的最大值https://blog.csdn.net/fkyyly/article/details/83930343 演算法: MinDistance(A[0..n-1])
【演算法】求陣列中某兩個數的和為目標值
給定一個整型陣列和一個目標值,如果陣列中某兩個數相加等於目標值,請返回這兩個數的下標。 Example: Given nums = [2, 7, 11, 15], target = 9, Because nums[0] + nums[1] = 2 + 7
統計句子中的單詞個數
from collections import Counter def bag_of_words(text): # TODO: Implement bag of words retur
2018今日頭條演算法面試程式設計題2
給定一個數組序列, 需要求選出一個區間, 使得該區間是所有區間中經過如下計算的值最大的一個:區間中的最小數 * 區間所有數的和最後程式輸出經過計算後的最大值即可,不需要輸出具體的區間。如給定序列 [6 2 1]則根據上述公式, 可得到所有可以選定各個區間的計算值:[6] =
資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數分別有序)
一個無序整數陣列,對它排序,使其前半部分都為奇數有序,後半部分為偶數有序。 (1)方案1 O(n^2) 基本想法:利用插入排序演算法,對奇偶子序列分別插入排序。用兩個變數把整個陣列分割為三個部分,第一個部分為奇數有序子序列,第二部分為偶數有序子序列,第三部分為未排序子序列。使用兩個變數進行分
資料結構演算法題/將陣列中元素奇數排在前面偶數在後面(前面奇數和後面的偶數不需要有序)
處理策略是定義兩個指標pHead,pTail並令其初始指向陣列頭節點和尾節點。pHead從前往後找應該放在尾部的偶數節點,pTail從後往前找應該放在頭部的奇數節點,若pHead位於pTail之前則交換二者內容,否則結束處理過程。 處理流程如下圖所示。從圖中可以看出時間複
資料結構演算法題/刪除陣列中重複元素
題目 給定一個排序的陣列,將陣列中的重複元素去掉,相同的只保留一個,並且返回陣列新的元素個數, 不要建立一個新的陣列來儲存結果。在常量時間內解決這個問題 解題思路 從第二個元素開始處理,記為當前處理的元素,如果當前元素與他的前一個元素相同就刪除這個元素, 如果不同就將它移動到正
今日頭條演算法原理(全文)
今天,演算法分發已經是資訊平臺、搜尋引擎、瀏覽器、社交軟體等幾乎所有軟體的標配,但同時,演算法也開始面臨質疑、挑戰和誤解。今日頭條的推薦演算法,從2012年9月第一版開發執行至今,已經經過四次大的調整和修改。 今日頭條委託資深演算法架構師曹歡歡博士,公開今日頭條的演算法原理,以期推動整
程式設計師面試一百題-07-翻轉句子中的單詞順序
1-題目 : 輸入一個英文句子,翻轉句子中單詞的順序,但單詞內字元的順序不變;句子中單詞以空格符隔開;為簡單起見,標點符號和普通字母一樣處理。 2-示例 : 輸入 : “I am a student.” 輸出 : “student. a am I” 3-思路 : 可以先顛倒句子中
PHP版今日頭條演算法面試題(持續更新)
1,現在有一個字串,你要對這個字串進行 n 次操作,每次操作給出兩個數字:(p, l) 表示當前字串中從下標為 p 的字元開始的長度為 l 的一個子串。你要將這個子串左右翻轉後插在這個子串原來位置的正後方,求最後得到的字串是什麼。字串的下標是從 0 開始的,你可以從樣例中得
經典演算法之Floyd演算法(求圖中任意一對頂點間的最短路徑)
/************************ author's email:[email protected] date:2018.1.30 *********************
演算法---求二進位制中1的個數
學習的地址:原文地址 問題描述 任意給定一個32位無符號整數n,求n的二進位制表示中1的個數,比如n = 5(0101)時,返回2,n = 15(1111)時,返回4。 1.普通法 我總是習慣叫普通法,因為我實在找不到一個合適的名字來描述它,其實就是最簡
演算法,求陣列中的元素和為某個數
1、更簡單一點的題目:判斷總共n個數,從1-n,找出其中和為 S的一段序列 這個題目採用的是:用維持一個視窗,如果視窗中的數小於了S就像S向右擴張,如果大於S就把左邊的數去掉 import java.util.ArrayList; public clas
資料結構演算法題/尋找陣列中唯一出現兩次的數
假設你有一個用1001個整陣列成的陣列,這些整數是任意排列的,但是你知道所有的整數都在1到1000(包括1000)之間。此外,除一個數字出現兩次外,其他所有數字只出現一次。假設你只能對這個陣列做一次處理,用一種演算法找出重複的那個數字。如果你在運算中使用了輔助的儲存方式,那麼你能找到不用這種方式的演
今日頭條[程式設計題] 手串
作為一個手串藝人,有金主向你訂購了一條包含n個雜色串珠的手串——每個串珠要麼無色,要麼塗了若干種顏色。為了使手串的色彩看起來不那麼單調,金主要求,手串上的任意一種顏色(不包含無色),在任意連續的m個串珠裡至多出現一次(注意這裡手串是一個環形)。手串上的顏色一共有c種。現在按順
Python演算法題----在列表中找到和為s的兩個數字
列表data的值為[1, 3, 4, 5, 8, 9, 11],找出這個列表中和為13的兩個數字的所有組合。這個好找,上過幼兒園大班的,估計都能找出來。4+9=13, 5+8=13。如何用pyt
經典演算法之Dijkstra演算法(求圖中任意一對頂點間的最短路徑)
/************************ author's email:[email protected] date:2018.1.30 ************************/ /* 迪傑斯特拉演算法思想: 設有兩個頂點集合S和T,集合S中
京東演算法題---求冪
題目: 冪運算有一些有趣的性質:9^3=27^2, 2^10=32^2 。給出一個整數n,找出滿足a^b=c^d(1≤a,b,c,d≤n)的式子有多少個,如:n=2時,滿足條件的式子有: 1^1 = 1^1 1^1 = 1^2 1^2 = 1^1 1^2 = 1^2 2^1
今日頭條演算法原理詳解全集,值得收藏!
今天,演算法分發已經是資訊平臺、搜尋引擎、瀏覽器、社交軟體等幾乎所有軟體的標配,但同時,演算法也開始面臨質疑、挑戰和誤解。今日頭條