**抛出问题**
这是一个算法题目,详细要求如下:
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
解题思路:
1、判断是否为变位词
2、将变位词按字典顺序输出
解题步骤:
1、定义string
2、判断两个string是否为变位词
3、将是变位词的string放入vector<string>中
4、vector进行sort排序
5、统计vector中的size
6、输出
编码:
1、判断两个string是否为变位词
(1)将两个string进行sort排序
(2)判断排序后的string是否相同:如果相同,则两个string为变位词;反之,则不同
int isbianweici(string s,string s1)
{
sort(s.begin(),s.end());
sort(s1.begin(),s1.end());
if(s == s1)
return 1;
else
return 0;
}
2、将vector<string>sort排序,输出
sort(sreslut.begin(),sreslut.end());
for(it=sreslut.begin();it != sreslut.end();it ++)
cout<<*it<<endl;
cout<<sreslut.size()<<endl;
完整代码:
#include<string>
#include<vector>
#include<string>
#include<iostream>
#include<algorithm>
using namespace std;
int isbianweici(string s,string s1)
{
sort(s.begin(),s.end());
sort(s1.begin(),s1.end());
if(s == s1)
return 1;
else
return 0;
}
int main()
{
int n;
cin>>n;
string firsts;
cin>>firsts;
vector<string> sreslut;
vector<string>::iterator it;
for(int i=0;i<n;i++)
{
string ss;
cin>>ss;
if(isbianweici(firsts,ss))
sreslut.push_back(ss);
}
sort(sreslut.begin(),sreslut.end());
for(it=sreslut.begin();it != sreslut.end();it ++)
cout<<*it<<endl;
cout<<sreslut.size()<<endl;
}
总结:
1、短短只有35行代码;
2、在查找变位词的策略上,如果采用先将string的所有变位词找出放入vector<string>中,然后在进行对比的方式,在算法运行中,如果string的长度为n,则需要进行n!次排序以查找string所有的变位词,这种方式在算法复杂度上显示是不能接受的;
3、在STL中,string类型的sort排序,会将string中的每一个char按照字典顺序进行排序,如果两个string经过sort排序之后,是相同的,那这两个string必然是变位词(两个string不同);
4、在STL中,vector<string>的sort排序,同样会将vector<string>中的元素按照字典顺序进行排序。
5、问题在35行代码之后,迎刃而解。
后话:
第一次写博客,最近初学STL,代码编写没有完全按照编程规范,有待学习。希望各位指点交流。
分享到:
相关推荐
STL解决排队问题STL解决排队问题STL解决排队问题STL解决排队问题STL解决排队问题
在这个问题的STL实现中,我们可以使用两种主要的数据结构——`std::vector`和`std::list`。`std::vector`是一种动态数组,它提供了随机访问和快速插入/删除的能力;而`std::list`则是一个双向链表,其优点在于元素的...
在C++编程中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它提供了一组高效、灵活且可重用的容器、迭代器、算法和函数...同时,这也是一个良好的实践案例,有助于提升C++编程和STL使用的技巧。
然而,使用 STL 需要注意一些细节,以避免常见的错误和问题。本文将总结一些常见的 STL 使用注意细节,帮助开发者更好地使用 STL。 1. auto_ptr 不能用 new[] 生成的 array 作为初值 auto_ptr 是一个智能指针,它...
通过实践和解决具体问题,可以更好地掌握STL的精髓。此外,了解STL的历史和设计思想,可以帮助我们更好地理解和利用这个强大的工具。 总之,STL是C++程序员必须掌握的重要部分,它提供了强大、高效的数据处理能力,...
将STL与共享内存结合,可以创建出跨进程通信的有效解决方案。 在标题和描述中提到的"基于stl共享内存,可以像使用STL容器一样使用共享内存",指的是通过设计一个自定义的内存分配器(Allocator),使得STL容器如...
这个“STL中文手册 doc文档”显然是为了解决C++程序员在使用STL时遇到的问题,帮助他们更好地理解和运用这个强大的工具。 STL主要包括四大组件:容器(Containers)、迭代器(Iterators)、算法(Algorithms)和...
- `stlread`函数可能无法处理某些不规范的STL文件,如有问题,可能需要使用第三方库或自定义函数进行处理。 通过以上步骤,你可以在MATLAB中有效地读取和显示STL点云数据,为3D模型的分析、处理和可视化提供便利。...
这两本电子书《C++ STL使用教程》和《STL编程》无疑会深入探讨STL的核心概念和实践应用。 STL的主要组成部分包括: 1. 容器:这是STL的基础,提供了一种组织和存储数据的方式。例如,`vector`是动态数组,允许快速...
50条有效使用STL的经验
C++ STL(Standard ...实践是检验理解的最好方式,尝试编写使用STL的代码,解决实际问题,可以帮助你更好地掌握这一强大的工具。通过本教程,你将能够深入理解STL并将其应用到C++编程中,提升代码的效率和可维护性。
涵盖了容器的选择、容器无关代码的误解、对象拷贝的轻量正确性、容器操作的优化、指针管理、线程安全性、关联容器的使用、迭代器的高效运用、STL算法的正确使用方法、仿函数的设计、STL编程技巧以及如何解决编译器...
数据结构则是计算机科学的基础,它探讨了如何有效地存储和处理数据,是解决复杂问题的关键。 标题"使用STL学习数据结构"意味着本书将深入讲解如何利用STL来实现和理解各种数据结构。STL包括容器(如vector、list、...
STL(STereoLithography)文件格式是3D打印和计算机辅助设计(CAD)领域中广泛使用的一种标准格式。这种格式主要用于存储三维几何模型,它由一系列的三角面片组成,每个面片由三个顶点定义,形成一个平面。在“STL....
这个压缩包“STL使用例子代码集合”包含了侯捷翻译的《C++标准程序库》一书中的代码示例,并且已经更新以支持C++0x(即C++11)的新特性。以下是对这些标签和文件名的详细解释及相关知识点: 1. **STL**:STL包括...
《Effective STL中文版:50条有效使用STL的经验》是C++编程领域的一本经典著作,由Scott Meyers撰写,旨在帮助程序员更好地理解和利用标准模板库(STL)。这本书提出了50个实用的建议,涵盖了STL的核心组件,如容器...
标准模板库STL的使用实验报告 在本实验报告中,我们将...通过本实验报告,我们学习了STL的使用,包括STL中的容器和算法,以及如何使用STL来解决实际问题。我们也了解了STL的优点,例如提高编程效率、降低编程难度等。
1. 打开文件:使用C++的fstream库打开文件,如`std::ifstream file("filename.stl", std::ios::binary)`,对于二进制文件,需设置`std::ios::binary`标志。 2. 检测文件格式:读取文件的前80个字节,判断是否为...