• Lintcode--002(两个字符串是变位词)


    写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。

     
    样例

    给出 s = "abcd",t="dcab",返回 true.
    给出 s = "ab", t = "ab", 返回 true.
    给出 s = "ab", t = "ac", 返回 false.

     标签 

    解题:
    class Solution {
    public:
        /**
         * @param s: The first string
         * @param b: The second string
         * @return true or false
         */
        bool anagram(string s, string t) {
            // write your code here
            
            //Lintcode--002;
            //此题目应该与Lintcode--001属于同类型题目,核心思路一致,只是最后两个字符串做的比较不一样;
            //这个题目甚至更简单一些,但是细节上需要注意ASCII码表,一些常见字符对应的十进制值,这有利于以后使用;
            //解析可参考Lintcode--001;
            
            
            //边界条件,长度如果不相等,直接pass;
            if(s.size()!=t.size()){
                return false;
            }
            //主要任务应该是比较两个字符串,各个字母出现的次数是否相同;
            //创建数组,用来统计各种字符出现的次数;
            
            else {
                int letters1[128];
                memset(letters1,0,sizeof(letters1));
                for(int i=0;i<s.size();i++){
                    letters1[s[i]-' ']++;
                }
                int letters2[128];
                memset(letters2,0,sizeof(letters2));
                for(int j=0;j<t.size();j++){
                    letters2[t[j]-' ']++;
                }
                for (int k=0;k<128;){
                    if (letters1[k]==letters2[k]){
                        k=k+1;
                    }
                    else 
                    {
                        return false;
                    }
                }
                return true;
            }
        }
    };

    附:ASCII码表

  • 相关阅读:
    图形合并
    启动脚本
    图形合并
    :(){:|:&};:
    C言语教程第八章:列举,位运算(5)
    C言语图形情势编程,赋性鼠标(4)
    C言语教程第十章:文件(6)
    C言语教程第十章:文件(4)
    红帽为什么要连结桌面Linux
    阶乘较劲争论器改善版
  • 原文地址:https://www.cnblogs.com/Allen-rg/p/5788638.html
Copyright © 2020-2023  润新知