字符串专题(求不重复的单词的个数 and 重复子串)


字符串专题
1.求不重复的单词的个数
考点:stringstream统计单词个数,set去除重复个数。

#include
#include
#include
#include
#include
#include 
using namespace std;

int main(){
	string str,t;
	while(getline(cin,str)){ 
		if(str=="#")break;   //停止条件
		istringstream stream(str); 
		set<string>Set; 
		while(stream>>t){
			Set.insert(t);   
		}
		cout<<Set.size()<<endl;	
	}
	return 0;
}

//求单词个数,不要求去掉重复

int main(){
	string str,t;
	int T;
	cin>>T; 
	getchar(); 
	while(T--){ 
	    int ans=0;
	    getline(cin,str);
		istringstream stream(str); 
		while(stream>>t){
			ans++;  
		}
		cout<<ans<<endl;	
	}
	return 0;
}

2.求字符串中重复的子字符串
字符串专题(求不重复的单词的个数 and 重复子串)_第1张图片这题直接做会超时,用哈希表unordered_set和unordered_map。
map中key为子串,value为重复次数。


class Solution {
public:
    vector<string> findRepeatedDnaSequences(string s) {
        vector<string> res;
        unordered_map<string,int> map;
        int len = s.size()-10;
        for(int i=0 ;i<=len ;i++ ){
            string sub = s.substr(i,10);
            if(map.find(sub) != map.end()){
                res.push_back(sub);//---------1
                map[sub]++;
            }else{
                map[sub]=1;
            }
        } 
        /*
        unordered_map::iterator it;//----------2
        for(it = map.begin();it!=map.end();it++){
            if(it->second>1)res.push_back(it->first);
        }
        */
        return res;
    } 
};

class Solution {
public:
    vector<string> findRepeatedDnaSequences(string s) {
        unordered_set<string> str_set;
        unordered_set<string> res_set;
        int len = s.size()-10;
        
        for(int i=0 ;i<=len ;i++ ){
            string sub=s.substr(i,10);
            if(str_set.find(sub)!=str_set.end())
                res_set.insert(sub);
            else
                str_set.insert(sub);
        }
        return vector<string>(res_set.begin(),res_set.end());
    }    
};

以后有关字符串的问题我都打算写在这篇里面
这样就好找多了…
= =

你可能感兴趣的:(字符串专题(求不重复的单词的个数 and 重复子串))