[Swust 549]--变位词(vector水过)

Time limit(ms): 1000        Memory limit(kb): 65535

Description

输入N和一个要查找的字符串,以下有N个字符串,我们需要找出其中的所有待查找字符串的变位词(例如eat,eta,aet就是变位词)按字典序列输出,并且输出总数目

Input

第一行:N(代表共有N个字符串属于被查找字符串) (N<=50) 第二行:待查找的字符串(不大于10个字符) 以下N行:被查找字符串(不大于10个字符)

Output

按字典序列输出在被查找字符串中待查找字符串的所有变位词 每行输出一个 输出完成后输出总数目

Sample Input


7

asdfg

asdgf

asdfg

dsafg

xcvcv

gfdsa

tyuv

asd

Sample Output


asdfg

asdgf

dsafg

gfdsa

4

嗯~~没什么好说的水题,运用vector直接水过 ,Orz~~

代码如下:

 1 #include <iostream>
 2 #include <string>
 3 #include <vector>
 4 #include <algorithm>
 5 using namespace std;
 6 bool judge(string a,string b){
 7     sort(a.begin(),a.end());
 8     sort(b.begin(),b.end());
 9     return a==b?true:false;
10 }
11 int main(){
12     string a,b;
13     vector<string> mpt;
14     vector<string>::iterator it;
15     int n,i;
16     cin>>n>>a;
17     for(i=0;i<n;i++){
18         cin>>b;
19         if(judge(a,b)) mpt.push_back(b);
20     }
21     sort(mpt.begin(),mpt.end());
22     for(it=mpt.begin();it!=mpt.end();it++)
23         cout<<*it<<endl;
24     cout<<mpt.size()<<endl;
25     return 0;
26 }

时间: 2024-07-30 03:26:18

[Swust 549]--变位词(vector水过)的相关文章

变位词排序

题目描述 请编写一个方法,对一个字符串数组进行排序,将所有变位词合并,保留其字典序最小的一个串.这里的变位词指变换其字母顺序所构成的新的词或短语.例如"triangle"和"integral"就是变位词. 给定一个string的数组str和数组大小int n,请返回排序合并后的数组.保证字符串串长小于等于20,数组大小小于等于300. 测试样例: ["ab","ba","abc","cba&quo

变位词

题目描述: 如果两个字符串的字符一样,但是顺序不一样,被认为是兄弟字符串,比如bad和adb即为兄弟字符串,现提供一个字符串,如何在字典中迅速找到它的兄弟字符串,请描述数据结构和查询过程. 思路一:用计数排序 设计一个数组,对单词每个字母计数加1,对兄弟单词每个字母计数减去1,如果最后这个数组的计数是0,那么就为兄弟单词 bool isBrotherWord(string &str1, string &str2) { int len1 = str1.length(); int len2 =

(字符串)字串变位词

题目: 给定两个串a和b,问b是否是a的子串的变位词,例如输入a=hello,b=lel,lle,ello都是true,但b=elo是false.(字串是连续的) 思路: 滑动窗口思想:动态维护一个“窗口”,比如b的长度是3,考察a[0..2],a[1..3],a[2..4]是否是b的变位词,关键在于如何与b比较? hash数组统计:基于字符的特殊性,可以用[0,255]的数组来统计字符出现的次数,假设都是小写的英文字母,则用[0,25]来表示b中每个单词出现的次数,通过记录非0次出现的个数no

第二章:Rotate、变位词

1.向量旋转 将一个具有n个元素的一维向量左旋i位. 1.1使用i个额外空间 void left_rotate(string &s,int i){ string s2(s,0,i);//将前i个字符复制到s2 int j=0; //将剩余n-i个元素左移i个位置 for(;i<s.size();i++){ s[j++] = s[i]; } //将s2复制到s的后面部分 for(int k=0;k<s2.size();k++){ s[j++] = s2[k]; } } 1.2定义一个函数

写一个函数对字符串数组排序,使所有变位词都相邻

题目 写一个函数对字符串数组排序,使得所有的变位词都相邻. 解答 首先,要弄清楚什么是变位词.变位词就是组成的字母相同,但顺序不一样的单词. 比如说:live和evil就是一对变位词.OK,那么这道题目的意思就很清楚了, 它并不要求我们将字符串数组中的字符串按字典序排序,否则我们直接调用STL中的sort 函数就可以了.它要求我们在排序的过程中,按照变位词的准则来排序. 这种情况下,我们还是可以调用sort函数,不过要自己写一个对比函数. 一般情况下我们如果要排序一个长度为n的数组A,我们可以这

005推断两个字符串是否是变位词 (keep it up)

写一个函数推断两个字符串是否是变位词. 变位词(anagrams)指的是组成两个单词的字符同样,但位置不同的单词.比方说, abbcd和abcdb就是一对变位词 这也是简单的题. 我们能够排序然后对照, 也能够直接统计字符出现的个数来推断.这里给出统计字符来推断的代码: bool isAnagram1(const string& vLeft, const string& vRight) { if (vLeft.size() != vRight.size()) return false; i

变位词的查找(上)

本文也同步发表在我的公众号"我的天空" 这次我们聊一个比较有意思的话题:变位词的查找,这个话题在<编程珠玑>中出现,此书很经典,偏向于算法,大家如果能通读的话,肯定受益匪浅!   什么是变位词 不同的单词,如果其组成的字母相同的话,那么这些单词就互为变位词,譬如pots.stop. tops这三个单词就是互为变位词,都是由字母p.o.t.s组成,但是"pot" 就不与上述单词互为变位词,其缺少字母s,"potss"也不是,其多了一个字

互为变位词

// 判断两个单词是否互为变位词: 如果两个单词中的字母相同,并且每个字母出现的次数也相同, 那么这两个单词互为变位词 #include <stdio.h> #include <string.h> int is_anagram(char *s1, char *s2) // 判断两个数是否互为变位词, 若是返回1 { if(strlen(s1) != strlen(s2)) return 0; int count[256] = {0}; char *p; p = s1; while(

CareerCup之1.4判断字符串是否为变位词

[题目] 原文: 1.4 Write a method to decide if two strings are anagrams or not. 译文: 写一个函数判断两个字符串是否是变位词. [分析] 变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词.比如说, abbcd和abcdb就是一对变位词.该题目有两种思路: [思路一] 由于变位词只是字母的顺序改变,字符长度,字符种类没有改变,所以根据此我们只要重新根据字典序排序一下,两个字符串也就一样了. The eyes