Lintcode--003(乱序字符串)
给出一个字符串数组S,找到其中所有的乱序字符串(Anagram)。如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中。
注意事项
所有的字符串都只包含小写字母
对于字符串数组 ["lint","intl","inlt","code"]
返回 ["lint","inlt","intl"]
第一次尝试解决,方法复杂,且不能通过。代码如下:
class Solution {
public:
/**
* @param strs: A list of strings
* @return: A list of strings
*/
vector<string> anagrams(vector<string> &strs) {//vector<string> s; //定义个一个字符串容器s
// write your code here
//先考虑边界情况,如果字符串数组s中的所有字符串,都不等长,则不存在乱序字符串;
for(int i=;i<strs.size();i++){
int a[i]=strs[i].size();
}
for(int j=;j<strs.size()-;j++){
for(int k=j+;k<strs.size();k++){
if(a[j]>&&a[k]>&&a[j]==a[k]){
vector<string> s;
s.push_back(strs[j]);
strs[j]=" ";
s.push_back(strs[k]);
}
else{
return null;
}
}
}
int letters[s.size()][];
memset(letters,,letters);
for (int m=;m<s.size();m++){
string ll;
ll=s[i];
for(n=;n<ll.size();n++){
letters[m][ll[n]-'a']++;
}
}
vector<string> t;
for (int a=;a<s.size()-;a++){
for(int b=a+;b<s.size();b++){
for(int c=;c<;){
if (letters[a][c]==letters[b][c])
{
c=c+;
}
else{
continue;
}
}
t.push_back(s[a]);
s[a]=" ";
t.push_back(s[b]);
}
return t;
}
};
二次参考:http://blog.csdn.net/wangyuquanliuli/article/details/45792029
解决思路很简单:对每个字符串进行排序,然后用hash表记录个数就行
class Solution {
public:
/**
* @param strs: A list of strings
* @return: A list of strings
*/
vector<string> anagrams(vector<string> &strs) {//vector<string> s; 定义个一个字符串容器s
// write your code here
//分析:对每个字符串进行排序,然后用hash表记录个数就行
map<string,int> m; //定义一个关联容器(hash表),提供一对一的数据处理能力。初始值为0;
for(auto s:strs) //s与strs[i]属于同种类型,也就是说,都是字符串,从第一个字符串到最后一个字符串;
{
sort(s.begin(),s.end()); //对字符串数组中的每个字符串进行排序
m[s]++; //将排序后的s,他的值加1,但这个排序不影响strs本身,只作用于for里面。
}
vector<string> ret; //定义一个字符串容器
for(auto s:strs)
{
auto temp = s;
sort(temp.begin(),temp.end()); //将每个字符串排序,如果排序之后,发现最后的m[temp]值大于1,则说明是乱序。
if(m[temp]>)
ret.push_back(s); //把乱序的字符串放到容器中,这样遍历每个字符串,就可以得到最终的结果。
}
return ret;
}
};
1. 关于字符串容器的定义和操作:
vector<string> vec;//定义个一个字符串容器,相当于字符串数组;
string str;
str = "abc";
vec.push_back(str);//把字符串str压进容器,必须使用push_back()动态添加新元素
vec.push_back("def");//把字符串"def"压进容器
vec.push_back("123");
for(int i=0; i<vec.size(); i++)
{
cout<<vec[i]<<endl;//打印容器的内容
}
vec.pop_back();//取出容器中最后一个
for(int i=0; i<vec.size(); i++)
{
cout<<vec[i]<<endl;//打印容器的内容
}
若要一次性初始化,如下:
vec.resize(4,"abc"); //一次性有4个abc
2. 字符串相关:
【s.size()函数返回字符串s中的字符个数;s.empty()用来确认字符串s是否为空;】
【string类型拼接符"+"必须与一个string类型相邻 ,不能在两侧都是字符串常量】
注:关于hash表与HashMap原理,区别以及实现在面试中频繁出现,需要深刻理解。
3. hash表原理参考 (1). http://www.cnblogs.com/dolphin0520/archive/2012/09/28/2700000.html
(2). http://blog.chinaunix.net/uid-24951403-id-2212565.html
(3). http://kb.cnblogs.com/page/189480/
4. HashMap原理参考 (1). http://blog.csdn.net/vking_wang/article/details/14166593#t0
(2). http://my.oschina.net/boxizen/blog/177744
Map的详细用法: http://blog.csdn.net/sunshinewave/article/details/8067862
Lintcode--003(乱序字符串)的更多相关文章
- lintcode:anagrams 乱序字符串
题目 乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 您在真实的面试中是否遇到过这个 ...
- 乱序字符串anagrams
[抄题]: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 对于字符串数组 ["lin ...
- 760. Find Anagram Mappings乱序字符串的坐标位置
[抄题]: Given two lists Aand B, and B is an anagram of A. B is an anagram of A means B is made by rand ...
- LintCode-乱序字符串
题目描述: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字 ...
- VC6.0 多线程输出乱序问题
今天尝试编写多线程最简单的例子 #include "stdafx.h" #include "windows.h" #include <iostream&g ...
- lintcode-171-乱序字符串
171-乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包 ...
- 【转】文件中有10G个整数,乱序排列,要求找出中位数
题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...
- c#几种随机数组和数组乱序
相关资料MSDN:RNGCryptoServiceProvider Random Guid private static RNGCryptoServiceProvider rngCsp = n ...
- [Android Security] APK自我保护 - 代码乱序
cp : https://segmentfault.com/a/1190000005095406 乱序原理 为了增加逆向分析的难度,可以将原有代码在 smali 格式上进行乱序处理同时又不会影响程序的 ...
随机推荐
- Powershell调用静态方法
Powershell将信息存储在对象中,每个对象都会有一个具体的类型,简单的文本会以System.String类型存储,日期会以System.DateTime类型存储.任何.NET对象都可以通过Get ...
- left join 关联条件位置
select e.last_name, e.department_id, d.department_name from hr.employees e left outer join hr.depart ...
- Create XHR
var createXHR = function() { var xhr, last_e; var PROGIDS = [ "Msxml2.XMLHTTP.6.0", //&quo ...
- Delphi default属性
Delphi default属性 Delphi控件指定属性的时候可以加上Default关键字,例如property Color default clBtnface.一直以为这个是构造类的时候的默认值, ...
- DPDK2.1开发者手册4-7
Mempool Labrary 一个内存池(memory pool)就是固定大小对象的分配器.在dpdk中,它是通过名字来标示唯一性的,且使用环形队列来保存没有使用的空闲对象.它提供了一些可选项服务例 ...
- mac ssd开启trim
输入以下指令: 为了安全,此步为备份驱动 (可能需要输入密码) sudo cp -r /System/Library/Extensions/IOAHCIFamily.kext/Contents/Plu ...
- URAL 1244
题目大意:给出一个正整数M,给出N个正整数ai,让你在这些数中挑出一些数组成M的一个划分,如果符合条件的划分数超过两个,输出:-1,如果没有输出:0,如果有且仅有一个:则按顺序输出剩下的数的序号. 例 ...
- 2016-05-I
2016 年上半年软件设计师上午真题 1. VLIW 是( )的简称.A.复杂指令系统计算机 B.超大规模集成电路C.单指令流多数据流 D.超长指令字 2.主存与 Cache 的地址映射方式中,( ) ...
- google在线測试练习题1
Problem You receive a credit C at a local store and would like to buy two items. You first walk thro ...
- mysql分表方法-----MRG_MyISAM引擎分表法
一般来说,当我们的数据库的数据超过了100w记录的时候就应该考虑分表或者分区了,这次我来具体说说分表的一些方法.眼下我所知道的方法都是MYISAM的,INNODB怎样做分表而且保留事务和外键,我还不是 ...