子串计算

题目描述

给出一个01字符串(长度不超过100),求其每一个子串出现的次数。
输入描述:
输入包含多行,每行一个字符串。
输出描述:
对每个字符串,输出它所有出现次数在1次以上的子串和这个子串出现的次数,输出按字典序排序。

分析

  1. 使用map<string, int>,键是子串,值是子串出现的次数。
  2. 重点在于找到每一个子串
    for(int i = 1; i <= s.size(); i++){// 
            for(int j = 0; j < i; j++){
                string_counter[s.substr(j, i - j)]++;// substr(j, i - j), 返回以j为起点,i - j为长度的子串
            }
        }

#include <iostream>
#include <map>
#include <string>

using namespace std;

int main(){
    string s;
    while(cin >> s){
        map<string, int> string_counter;

        for(int i = 1; i <= s.size(); i++){
            for(int j = 0; j < i; j++){
                string_counter[s.substr(j, i - j)]++;
            }
        }

        for(map<string, int>::iterator it = string_counter.begin(); it != string_counter.end(); it++){
            if(it -> second > 1){
                cout << it -> first << " " << it -> second << endl;
            }
        }
    }
    return 0;
}
原文地址:https://www.cnblogs.com/zhuobo/p/10311500.html