题解 | #子串计算#
子串计算
https://www.nowcoder.com/practice/bcad754c91a54994be31a239996e7c11
#include<string> #include<cstdio> #include<vector> #include<algorithm> #include<iostream> using namespace std; struct cishu { string str; int num; }; bool cmp(cishu cs1, cishu cs2) { if (cs1.str < cs2.str) return true; return false; } int main() { //10101 string str; getline(cin, str); vector<cishu> res; cishu cs[1]; //str.pop_back(); for (int i = 0; i < str.size(); i++) { string result = ""; for (int j = 1; j <= str.size()-i; j++) { //result += str[j]; result=str.substr(i,j); //printf("*****%s\n", result.c_str()); cs[0].str = result; cs[0].num = 1; int flag = 0; if (res.size() != 0) { for (int j = 0; j < res.size(); j++) { if (res[j].str == result) { res[j].num++; flag = 1; break; } } if (flag == 0) { res.push_back(cs[0]); } } else { res.push_back(cs[0]); } } } sort(res.begin(), res.end(),cmp); //printf("%s\n", str.c_str()); for (int i = 0; i < res.size(); i++) { if(res[i].num>=2) printf("%s %d\n", res[i].str.c_str(), res[i].num); } }