【字符串与数组】

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.判断两个字符串是否由相同字符组成的更多相关文章

  1. [leetcode]242. Valid Anagram判断两个字符串是不是包含相同字符的重排列

    /* 思路是判断26个字符在两个字符串中出现的次数是不是都一样,如果一样就返回true. 记住这个方法 */ if (s.length()!=t.length()) return false; int ...

  2. java中判断两个字符串是否相等的问题

    我最近刚学java,今天编程的时候就遇到一个棘手的问题,就是关于判断两个字符串是否相等的问题.在编程中,通常比较两个字符串是否相同的表达式是“==”,但在java中不能这么写.在java中,用的是eq ...

  3. mysql 判断两个字符串是否存在包含关系-------(1,2,3)与(2,3)

    1.这里这个是目前有问题的   #创建FUNCTION  DELIMITER ;     CREATE FUNCTION `is_mixed`(str1 TEXT, str2 TEXT) RETURN ...

  4. python利用difflib判断两个字符串的相似度

    我们再工作中可能会遇到需要判断两个字符串有多少相似度的情况(比如抓取页面内容存入数据库,如果相似度大于70%则判定为同一片文章,则不录入数据库) 那这个时候,我们应该怎么判断呢? 不要着急,pytho ...

  5. lintcode702 连接两个字符串中的不同字符

    连接两个字符串中的不同字符   给出两个字符串, 你需要修改第一个字符串,将所有与第二个字符串中相同的字符删除, 并且第二个字符串中不同的字符与第一个字符串的不同字符连接 思路:遍历两个字符串,找到互 ...

  6. [google面试CTCI] 1-8.判断子字符串

    [字符串与数组] Q:Assume you have a method isSubstring which checks if one word is a substring of another G ...

  7. [google面试CTCI]1-3.字符串去重

    [字符串与数组] Q:Design an algorithm and write code to remove the duplicate characters in a string without ...

  8. ✡ leetcode 161. One Edit Distance 判断两个字符串是否是一步变换 --------- java

    Given two strings S and T, determine if they are both one edit distance apart. 给定两个字符串,判断他们是否是一步变换得到 ...

  9. leetcode-242 判断两个字符串是不是 Anagram ?

    题目描述 假设给定两个字符串 s 和 t, 让我们写出一个方法来判断这两个字符串是否是字母异位词? 字母异位词就是,两个字符串中含有字母的个数和数量都一样,比如: Example 1: Input: ...

随机推荐

  1. blog_导航

    blog导航 在左下侧:随笔分类   简要做个导航图放到这儿方便大家查阅 直奔爬虫:   点击->      直奔oracle:点击-> 

  2. zTree市县实现三个梯级DAO接口测试

    zTree市县实现三个梯级DAO接口测试 ProvinceDaoTest.java: /** * @Title:ProvinceDaoTest.java * @Package:com.gwtjs.da ...

  3. oracle_连接数_查看

    查看oracle数据库的连接数以及用户   .查询oracle的连接数 select count(*) from v$session; .查询oracle的并发连接数 select count(*) ...

  4. java_OutOfMorryError 内存溢出(replaceAll)

    最近在使用string类中的replaceAll函数时碰到这个错误,由于string长度比较长,文本文档9M多,可以增加jvm的内存大小解决. 下面是一篇对OutOfMorryError错误的一些处理 ...

  5. Linux通过编辑器vi使用介绍

    vi编辑器是所有Unix和Linux在标准的编辑系统. 对Unix和Linux该系统无论是什么版本号,vi编辑器是完全一样. 基本上vi它可分为三种状态,每一个是命令模式(commandmode).插 ...

  6. 在线预览Excel

    遇到的问题各种多 <system.web>        <identity impersonate="true" userName="Administ ...

  7. HBase数据同步ElasticSearch该程序

    ElasticSearch的River机械 ElasticSearch本身就提供了River机械,对于同步数据. 在这里,现在能找到的官方推荐River: http://www.elasticsear ...

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

  9. Asp.net TextBox只能输入数字

    原文:Asp.net TextBox只能输入数字 <asp:textbox id="TextBox1" onkeyup="if(isNaN(value))execC ...

  10. Codeforces 429 A. Xor-tree

    下来的第一次相遇是在不翻盖的同一节点,递归可以是.... A. Xor-tree time limit per test 1 second memory limit per test 256 mega ...