给出一个字符串数组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(乱序字符串)的更多相关文章

  1. lintcode:anagrams 乱序字符串

    题目 乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 您在真实的面试中是否遇到过这个 ...

  2. 乱序字符串anagrams

    [抄题]: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 对于字符串数组 ["lin ...

  3. 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 ...

  4. LintCode-乱序字符串

    题目描述: 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包含小写字 ...

  5. VC6.0 多线程输出乱序问题

    今天尝试编写多线程最简单的例子 #include "stdafx.h" #include "windows.h" #include <iostream&g ...

  6. lintcode-171-乱序字符串

    171-乱序字符串 给出一个字符串数组S,找到其中所有的乱序字符串(Anagram).如果一个字符串是乱序字符串,那么他存在一个字母集合相同,但顺序不同的字符串也在S中. 注意事项 所有的字符串都只包 ...

  7. 【转】文件中有10G个整数,乱序排列,要求找出中位数

    题目:在一个文件中有 10G 个整数,乱序排列,要求找出中位数.内存限制为 2G.只写出思路即可(内存限制为 2G的意思就是,可以使用2G的空间来运行程序,而不考虑这台机器上的其他软件的占用内存). ...

  8. c#几种随机数组和数组乱序

    相关资料MSDN:RNGCryptoServiceProvider   Random   Guid private static RNGCryptoServiceProvider rngCsp = n ...

  9. [Android Security] APK自我保护 - 代码乱序

    cp : https://segmentfault.com/a/1190000005095406 乱序原理 为了增加逆向分析的难度,可以将原有代码在 smali 格式上进行乱序处理同时又不会影响程序的 ...

随机推荐

  1. iOS打电话、发邮件、发短信、打开浏览器

    //1.调用 自带mail [[UIApplication sharedApplication] openURL:[NSURL URLWithString:@"mailto://163@16 ...

  2. mysql Encryption and Compression Functions

    Name Description AES_DECRYPT() Decrypt using AES AES_ENCRYPT() Encrypt using AES COMPRESS() Return r ...

  3. mysql 建立加密连接

    加密连接可提高数据的安全性,但会降低性能.要进行加密连接,必须满足以下要求: user权限表里要有相关的SSL数据列.如果安装的MySQL服务器是4.0.0版的,user权限表已包含相关的SSL数据列 ...

  4. 设计模式2----建造者模式(builder pattern)

    定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 类型:创建类模式 类图: UML图 四个要素 Builder: 抽象建造者ConcreteBuilder: 具体建造者 ...

  5. OD: Exploit Me - Inject Instruction

    修改之前的代码: #include<stdio.h> #include<stdlib.h> #include<string.h> #include<windo ...

  6. BFC——块级格式上下文

    BFC中的B指的是block,对应的还有IFC,I指的是inline.对于BFC的理解可以参考层叠上下文.页面中,盒子的排布规则,是生效在对应的BFC中.两个BFC中的布局互不影响.页面的本身的根本身 ...

  7. HTML5 Canvas图片操作简单实例1

    1.加载显示图片 <canvas id="canvasOne" class="myCanvas" width="500" height ...

  8. 【Linux常用命令(更新)】

    1.ifconfig:查看当前ip,网卡信息 2.df -h:查看文件系统的使用情况,挂载点信息 3.du -sh  /var:查看/var文件夹大小 4.netstat -a:查看网络联机状态 5. ...

  9. C#list泛型集合

    //创建list泛型集合 List<int> ilist = new List<int>(); ilist.Add(); ilist.Add(); ilist.AddRange ...

  10. Flex布局摆脱float带来的布局问题

    完整文章地址http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html?utm_source=tuicool 使用浮动(float)的一个比较疑惑 ...