两个字符串的第二长公共单词

问题 功能是求出字符 s 与字符串t的第二公共单词(这里,假设两个
字符串均由英字母和空格字符组成); 若找到这样的公共单词,
函数返回该单词,否则,函数返回NULL,如果有多个满足要
求,则返回第一个单词。
例如:若 s=“This is C programming text”,t=“This is a text for C
programming”,则函数返回“this”。
思路 先将字符串分解成为数组, 再对数组内容进行比较, 将比较获得的结果储存起来, 最后按照长度排序获得答案.
解决方案 【两个字符串的第二长公共单词】C++

#include #include #include #include using namespace std; string solution(string& s, string& t); vector split(string& s); //将字符串分解为字符串数组 bool compareLen(const string& a, const string& b) { return (a.size() > b.size()); }int main() { string s("This is C programming text"); string t("This is a text for C programming"); string r = solution(s, t); cout << r << "\n"; return 0; }string solution(string& s, string& t) { //分词, 讲两个字符串按照空格分解 vector ss = split(s); vector tt = split(t); //对比获得的两个数组,逐个比较 vector result; for(auto &&sstr : ss){ for(auto &&tstr : tt){ if(sstr == tstr){ result.push_back(sstr); } } } //sort and get the result sort(result.begin(), result.end(), compareLen); if(result.size() > 1) return result.at(1); else if(result.size() == 1) return result.front(); else return "NULL"; }vector split(string& s) { vector out; vector blankPos; for(size_t i = 0; i < s.size(); ++i){ if(s.at(i) == ' '){ blankPos.push_back(i); } } if(blankPos.front() != 0){ blankPos.insert(blankPos.begin(), 0); } if(blankPos.back() != s.size()){ blankPos.push_back(s.size()); }for(size_t i = 1; i < blankPos.size(); ++i){ out.push_back(s.substr(blankPos.at(i - 1), blankPos.at(i) - blankPos.at(i - 1))); } return out; }

    推荐阅读