CareerCup之1.4判断字符串是否为变位词

【题目】

原文:

1.4 Write a method to decide if two strings are anagrams or not.

译文:

写一个函数判断两个字符串是否是变位词。

【分析】

变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词。比如说, abbcd和abcdb就是一对变位词。该题目有两种思路:

【思路一】

由于变位词只是字母的顺序改变,字符长度,字符种类没有改变,所以根据此我们只要重新根据字典序排序一下,两个字符串也就一样了。

The eyes(眼睛)——They see.(它们看得见。)这是一对变位词。

根据字典序排序他们都会变成:eeehtsy

时间复杂度为:O(nlogn)

【思路二】

由于组成变位词的字符是一模一样的, 因此我们可以先统计每个字符串中各个字符出现的次数, 然后看这两个字符串中各字符出现次数是否一样。如果是,则它们是一对变位词。 这需要开一个辅助数组来保存各字符的出现次数。我们可以开一个大小是256的整数数组, 遍历第一个字符串时,将相应字符出现的次数加1;遍历第二个字符串时, 将相应字符出现的次数减1。最后如果数组中256个数都为0,说明两个字符串是一对变位词。 (第1个字符串中出现的字符都被第2个字符串出现的字符抵消了), 如果数组中有一个不为0,说明它们不是一对变位词。

【代码一】

/*********************************
*   日期:2014-05-06
*   作者:SJF0115
*   题目: 判断字符串是否为变位词
*   来源:CareerCup
**********************************/
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;

//判断字符串是否为变位词
bool IsAnagrams(string str1,string str2){
    if(str1 == "" || str2 == ""){
        return false;
    }
    int len1 = str1.length();
    int len2 = str2.length();
    //变位词长度一样
    if(len1 != len2){
        return false;
    }
    //排序
    sort(&str1[0],&str1[0]+len1);
    sort(&str2[0],&str2[0]+len2);
    if(str1 == str2){
        return true;
    }
    else{
        return false;
    }
}

int main(){
    char str1[] = "the eyes";
    char str2[] = "they see";
    bool result = IsAnagrams(str1,str2);
    cout<<result<<endl;
    return 0;
}

【代码二】

//判断字符串是否为变位词
bool IsAnagrams(string str1,string str2){
    int i;
    if(str1 == "" || str2 == ""){
        return false;
    }
    int len1 = str1.length();
    int len2 = str2.length();
    //变位词长度一样
    if(len1 != len2){
        return false;
    }
    //初始化
    int vis[256];
    memset(vis,0,sizeof(vis));
    //遍历第一个字符串,将相应字符出现的次数加1
    //遍历第二个字符串,将相应字符出现的次数减1
    for(i = 0;i < len1;i++){
        vis[str1[i]] ++;
        vis[str2[i]] --;
    }
    //判断是否为变位词 如果数组中256个数都为0,说明两个字符串是一对变位词。
    for(i = 0;i < 256;i++){
        if(vis[i] != 0){
            return false;
        }
    }
    return true;
}

CareerCup之1.4判断字符串是否为变位词,布布扣,bubuko.com

时间: 2024-08-11 05:29:03

CareerCup之1.4判断字符串是否为变位词的相关文章

判断两个字符串是否是变位词 (keep it up)

写一个函数判断两个字符串是否是变位词.变位词(anagrams)指的是组成两个单词的字符相同,但位置不同的单词.比如说, abbcd和abcdb就是一对变位词 这也是简单的题. 我们可以排序然后对比, 也可以直接统计字符出现的个数来判断.这里给出统计字符来判断的代码: bool isAnagram1(const string& vLeft, const string& vRight) { if (vLeft.size() != vRight.size()) return false; in

005推断两个字符串是否是变位词 (keep it up)

写一个函数推断两个字符串是否是变位词. 变位词(anagrams)指的是组成两个单词的字符同样,但位置不同的单词.比方说, abbcd和abcdb就是一对变位词 这也是简单的题. 我们能够排序然后对照, 也能够直接统计字符出现的个数来推断.这里给出统计字符来推断的代码: bool isAnagram1(const string& vLeft, const string& vRight) { if (vLeft.size() != vRight.size()) return false; i

判断字符串是否是异位词

s="anagram", t="nagaram"这就属于异位词,长度一样,包含的字母都一样,每个字符出现的频率也一样,只是顺序不同而已s="rat",t="car"这种就不属于异位词,因为s中的'r'在t中没有思路:1 首先看字符串长度是否一样,不一样则为false2 看每个字符出现的频率是否一样,可以用到hash表.申请一个26长度的int数组.首先遍历字符串s然后,将每个字符串换算成索引后存入数组,并同时进行计数3 遍历字

9.11排序与查找(二)——对字符串数组进行排序,将所有的变位词排在相邻的位置

/** * 功能:对字符串数组进行排序,将所有的变位词排在相邻的位置. */ 两种方法: 方法一: /** * 思路:套用排序算法,并修改比较器.这里比较器用来指示两个字符串胡伟变位词就是相等的. * @param array */ public static void sort(String[] array){ Arrays.sort(array, new AnagramComparator()); } class AnagramComparator implements Comparator

判断字符串是不是数字

NumberUtils.isNumber(str)判断字符串是不是数字或者能不能转换成数字 public class StringIsNumber { public static void main(String[] args) { Scanner s = new Scanner(System.in); String str = s.nextLine(); if(NumberUtils.isNumber(str)){ System.out.println("输入的是数字"); }els

练习:判断字符串“mingrikejijavabu”中,字符“i”出现了几次,并将结果输出。

1 // 判断字符串“mingrikejijavabu”中,字符“i”出现了几次,并将结果输出. 2 3 String str="mingrikejijavabu"; 4 5 //方法1:替换法 6 String str1=str.replace("i",""); //将字符串中i替换为空,创建新的字符串 7 System.out.println("i出现的次数为:"+(str.length()-str1.length()))

判断字符串中字母出现的次数用分割法

public class zuoye3 { public static void main(String[] args) { String a="mingrikejijavabu";//判断字符串“i”出现了几次并将其输出 int c=0;//令c为i出现的次数 String[] b=a.split("");//分隔符,把语句分割. for (String x:b)//遍历输出一遍所有字母 { if(x.equals("i"))//是否有与i相等

PHP判断字符串中是否包含指定字符串,支持中文哦

RT,随手写的 1 /** 2 * 判断字符串中是否包含指定字符串 3 * @var source 源字符串 4 * @var target 要判断的是否包含的字符串 5 * @return bool 6 */ 7 function hasstring($source,$target){ 8 preg_match_all("/$target/sim", $source, $strResult, PREG_PATTERN_ORDER); 9 return !empty($strResul

Valid Palindrome ——判断字符串是否为回文串

本文是在学习中的总结,欢迎转载但请注明出处:http://blog.csdn.net/pistolove/article/details/41488377 Valid Palindrome Given a string, determine if it is a palindrome, considering only alphanumeric characters and ignoring cases. For example, "A man, a plan, a canal: Panama&