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

【题目】

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

【分析】

变位词(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代码 思路二】
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,633评论 0 4
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 34,341评论 18 399
  • -- 参加《培训师九段》课程有感 3天《培训师九段》课程,在意犹未尽中,悄然落下帷幕,深深感恩!感恩知识变现...
    国泰民安_风调雨顺阅读 1,917评论 0 2
  • 流血, 结痂, 撕裂, 再度流血, 再度溃烂, 又在度结痂, 握着手术刀, 将疤痕再次剖开, 用新的眼光, 去审视...
    山太阅读 642评论 0 1
  • 我以为别人尊重我,是因为我很优秀。慢慢的我明白了,别人尊重我,是因为别人很优秀;优秀的人更懂得尊重别人。对人...
    正阳妈妈阅读 106评论 0 1

友情链接更多精彩内容