[google面试CTCI] 1-4.判断两个字符串是否由相同字符组成
【字符串与数组】
Q:Write a method to decide if two strings are anagrams or not
题目:写一个算法来判断两个字符串是否为换位字符串。(换位字符串是指组成字符串的字符相同,但位置不同)
解答:
方法一:假设为ascii2码字符串,那么可以分配两个256大小的int数组,每个数组用于统计一个字符串各个字符出现的次数,最后,比较这两个int数组,看是否每个元素都相同。时间复杂度为O(n)。
int anagrams1(char* str1,char* str2){
int len1=strlen(str1);
int len2=strlen(str2);
if(len1 != len2)
return 0;
int flags1[256],flags2[256];
memset(flags1,0,sizeof(flags1));
memset(flags2,0,sizeof(flags2));
int i;
for(i=0;i<len1;++i){
++flags1[(int)str1[i]];
++flags2[(int)str2[i]];
}
for(i=0;i<256;++i){
if(flags1[i]!=flags2[i])
return 0;
}
return 1;
}
方法二:事实上可以在方法一的基础上更进一步简化,只需要分配一个256大小的int数组即可,某个字符在str1中出现,则将int数组对应元素值加1;某个字符在str2中出现,则将int数组对应元素值减去1,最后,只需要看int数组是否全为0。是不是更优雅?呵呵
int anagrams2(char* str1,char* str2){
int len1=strlen(str1);
int len2=strlen(str2);
if(len1 != len2)
return 0;
int flags[256];
memset(flags,0,sizeof(flags));
int i;
for(i=0;i<len1;++i){
++flags[str1[i]];
--flags[str2[i]];
}
for(i=0;i<256;++i){
if(flags[i]!=0)
return 0;
}
return 1;
}
方法三:不管三七二十一,我们把两个字符串排序。对排好序后的字符串进行比较。时间复杂度为O(n*logn)。
int anagrams(char* str1,char* str2){
return sort(str1)==sort(str2);
}
作者:Viidiot 微信公众号:linux-code
[google面试CTCI] 1-4.判断两个字符串是否由相同字符组成的更多相关文章
- [leetcode]242. Valid Anagram判断两个字符串是不是包含相同字符的重排列
/* 思路是判断26个字符在两个字符串中出现的次数是不是都一样,如果一样就返回true. 记住这个方法 */ if (s.length()!=t.length()) return false; int ...
- java中判断两个字符串是否相等的问题
我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...
- mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)
1.这里这个是目前有问题的 #创建FUNCTION DELIMITER ; CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURN ...
- python利用difflib判断两个字符串的相似度
我们再工作中可能会遇到需要判断两个字符串有多少相似度的情况(比如抓取页面内容存入数据库,如果相似度大于70%则判定为同一片文章,则不录入数据库) 那这个时候,我们应该怎么判断呢? 不要着急,pytho ...
- lintcode702 连接两个字符串中的不同字符
连接两个字符串中的不同字符 给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不同字符连接 思路:遍历两个字符串,找到互 ...
- [google面试CTCI] 1-8.判断子字符串
[字符串与数组] Q:Assume you have a method isSubstring which checks if one word is a substring of another G ...
- [google面试CTCI]1-3.字符串去重
[字符串与数组] Q:Design an algorithm and write code to remove the duplicate characters in a string without ...
- ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java
Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到 ...
- leetcode-242 判断两个字符串是不是 Anagram ?
题目描述 假设给定两个字符串 s 和 t, 让我们写出一个方法来判断这两个字符串是否是字母异位词? 字母异位词就是,两个字符串中含有字母的个数和数量都一样,比如: Example 1: Input: ...
随机推荐
- blog_导航
blog导航 在左下侧:随笔分类 简要做个导航图放到这儿方便大家查阅 直奔爬虫: 点击-> 直奔oracle:点击->
- zTree市县实现三个梯级DAO接口测试
zTree市县实现三个梯级DAO接口测试 ProvinceDaoTest.java: /** * @Title:ProvinceDaoTest.java * @Package:com.gwtjs.da ...
- oracle_连接数_查看
查看oracle数据库的连接数以及用户 .查询oracle的连接数 select count(*) from v$session; .查询oracle的并发连接数 select count(*) ...
- java_OutOfMorryError 内存溢出(replaceAll)
最近在使用string类中的replaceAll函数时碰到这个错误,由于string长度比较长,文本文档9M多,可以增加jvm的内存大小解决. 下面是一篇对OutOfMorryError错误的一些处理 ...
- Linux通过编辑器vi使用介绍
vi编辑器是所有Unix和Linux在标准的编辑系统. 对Unix和Linux该系统无论是什么版本号,vi编辑器是完全一样. 基本上vi它可分为三种状态,每一个是命令模式(commandmode).插 ...
- 在线预览Excel
遇到的问题各种多 <system.web> <identity impersonate="true" userName="Administ ...
- HBase数据同步ElasticSearch该程序
ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsear ...
- Unofficial Microsoft SQL Server Driver for PHP (sqlsrv)非官方的PHP SQL Server 驱动
原文 Unofficial Microsoft SQL Server Driver for PHP (sqlsrv) Here are unofficial modified builds of Mi ...
- Asp.net TextBox只能输入数字
原文:Asp.net TextBox只能输入数字 <asp:textbox id="TextBox1" onkeyup="if(isNaN(value))execC ...
- Codeforces 429 A. Xor-tree
下来的第一次相遇是在不翻盖的同一节点,递归可以是.... A. Xor-tree time limit per test 1 second memory limit per test 256 mega ...