`
acme_ltt
  • 浏览: 53703 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

使用STL解决变位词问题

阅读更多

**抛出问题**

这是一个算法题目,详细要求如下:

 

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解决排队问题

    stl 解决约瑟夫问题

    在这个问题的STL实现中,我们可以使用两种主要的数据结构——`std::vector`和`std::list`。`std::vector`是一种动态数组,它提供了随机访问和快速插入/删除的能力;而`std::list`则是一个双向链表,其优点在于元素的...

    使用STL写的学生管理系统

    在C++编程中,STL(Standard Template Library,标准模板库)是不可或缺的一部分,它提供了一组高效、灵活且可重用的容器、迭代器、算法和函数...同时,这也是一个良好的实践案例,有助于提升C++编程和STL使用的技巧。

    基于stl共享内存,可以像使用STL容器一样使用共享内存

    将STL与共享内存结合,可以创建出跨进程通信的有效解决方案。 在标题和描述中提到的"基于stl共享内存,可以像使用STL容器一样使用共享内存",指的是通过设计一个自定义的内存分配器(Allocator),使得STL容器如...

    使用stl 注意细节

    然而,使用 STL 需要注意一些细节,以避免常见的错误和问题。本文将总结一些常见的 STL 使用注意细节,帮助开发者更好地使用 STL。 1. auto_ptr 不能用 new[] 生成的 array 作为初值 auto_ptr 是一个智能指针,它...

    STL入门 STL入门 STL入门 STL入门 STL入门 STL入门

    通过实践和解决具体问题,可以更好地掌握STL的精髓。此外,了解STL的历史和设计思想,可以帮助我们更好地理解和利用这个强大的工具。 总之,STL是C++程序员必须掌握的重要部分,它提供了强大、高效的数据处理能力,...

    stl文件在matlab中的读取.zip_matlab 点云stl_matlab与STL文件_matlab读取stl_stl点云

    - `stlread`函数可能无法处理某些不规范的STL文件,如有问题,可能需要使用第三方库或自定义函数进行处理。 通过以上步骤,你可以在MATLAB中有效地读取和显示STL点云数据,为3D模型的分析、处理和可视化提供便利。...

    stl 电子书两本(C++ STL使用教程,STL编程)

    这两本电子书《C++ STL使用教程》和《STL编程》无疑会深入探讨STL的核心概念和实践应用。 STL的主要组成部分包括: 1. 容器:这是STL的基础,提供了一种组织和存储数据的方式。例如,`vector`是动态数组,允许快速...

    EFFECTIVE+STL中文版:50条有效使用STL的经验

    50条有效使用STL的经验

    【c++ Stl教程】stl使用及stl编程

    C++ STL(Standard ...实践是检验理解的最好方式,尝试编写使用STL的代码,解决实际问题,可以帮助你更好地掌握这一强大的工具。通过本教程,你将能够深入理解STL并将其应用到C++编程中,提升代码的效率和可维护性。

    effective stl 中文 pdf

    涵盖了容器的选择、容器无关代码的误解、对象拷贝的轻量正确性、容器操作的优化、指针管理、线程安全性、关联容器的使用、迭代器的高效运用、STL算法的正确使用方法、仿函数的设计、STL编程技巧以及如何解决编译器...

    使用STL学习数据结构

    数据结构则是计算机科学的基础,它探讨了如何有效地存储和处理数据,是解决复杂问题的关键。 标题"使用STL学习数据结构"意味着本书将深入讲解如何利用STL来实现和理解各种数据结构。STL包括容器(如vector、list、...

    STL使用例子代码集合

    这个压缩包“STL使用例子代码集合”包含了侯捷翻译的《C++标准程序库》一书中的代码示例,并且已经更新以支持C++0x(即C++11)的新特性。以下是对这些标签和文件名的详细解释及相关知识点: 1. **STL**:STL包括...

    Effective STL中文版:50条有效使用STL的经验.zip

    《Effective STL中文版:50条有效使用STL的经验》是C++编程领域的一本经典著作,由Scott Meyers撰写,旨在帮助程序员更好地理解和利用标准模板库(STL)。这本书提出了50个实用的建议,涵盖了STL的核心组件,如容器...

    STL中文手册 doc文档

    这个“STL中文手册 doc文档”显然是为了解决C++程序员在使用STL时遇到的问题,帮助他们更好地理解和运用这个强大的工具。 STL主要包括四大组件:容器(Containers)、迭代器(Iterators)、算法(Algorithms)和...

    标准模板库STL的使用 实验报告.docx

    标准模板库STL的使用实验报告 在本实验报告中,我们将...通过本实验报告,我们学习了STL的使用,包括STL中的容器和算法,以及如何使用STL来解决实际问题。我们也了解了STL的优点,例如提高编程效率、降低编程难度等。

    STL文件的读取显示.zip_STL c++_STL文件_STL读取_读取stl_读取stl文件

    1. 打开文件:使用C++的fstream库打开文件,如`std::ifstream file("filename.stl", std::ios::binary)`,对于二进制文件,需设置`std::ios::binary`标志。 2. 检测文件格式:读取文件的前80个字节,判断是否为...

    一种使用 STL 文件进行高效轮廓构造的改进切片算法

    标题中的“一种使用 STL 文件进行高效轮廓构造的改进切片算法”是指在3D打印或计算机辅助制造(CAM)领域中,对STL(Standard Tessellation Language)模型进行切片处理的一种优化方法。STL是一种广泛应用的文件格式...

Global site tag (gtag.js) - Google Analytics