美文网首页【Java and Python】算法
1.【Java/Python】判断字符串是否为变位词

1.【Java/Python】判断字符串是否为变位词

作者: 于阗 | 来源:发表于2017-02-09 14:29 被阅读441次

【题目】

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

【分析】

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

【思路一】

由于变位词只是字母顺序不同,而长度一样,字符种类一样。因此只需对两个字符串进行排序,排序后两个字符串一致则为变位词。
We are young --- are young We这是一对变位词。(这种解法算不上最优,不过清晰、简单易懂,从实践角度出发,这可能是解决该问题的上佳之选。但是为了效率,还有更好的解法。)

【思路二】

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

【Java代码 思路一】
import java.util.Arrays

public class Solution{
  /**
     * @param s: The first string
     * @param b: The second string
     * @return true or false
     */
    public boolean anagram(String s, String t) {
        // write your code here
        if( s.length() != t.length())
            return false;
        return sort(s).equals(sort(t));
    }
    //字符串排序
    public String sort(String s){
        char[] a = s.toCharArray();
        Arrays.sort(a);
        return new String(a);
    }
}
【Java代码 思路二】
    public boolean anagram(String s, String t){
        if(s.length() != t.length()){
            return false;
        }
        int[] ascii = new int[256];
        for(char i : s.toCharArray())
            ascii[i]++;
        for(int j=0; j<t.length(); j++){
            if(--ascii[t.charAt(j)] < 0)
                return false;
        }
        return true;
    }
【Python代码 思路一】
【Python代码 思路二】

相关文章

网友评论

    本文标题:1.【Java/Python】判断字符串是否为变位词

    本文链接:https://www.haomeiwen.com/subject/kejiittx.html