LintCode - 比较字符串(普通)

版权声明:本文为博主原创文章,未经博主允许不得转载。

难度:容易
要求:

比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母
** 注意事项
在 A 中出现的 B 字符串里的字符不需要连续或者有序。
样例
给出 A = "ABCD"B = "ACD",返回 true
给出 A = "ABCD" B = "AABC", 返回 false

思路:
假如A字符串长度为 m,B字符串长度为n,考虑遍历B然后在A中查询是否存在此字符,那么需要遍历次数是 m * n 次而且不能满足B中如果出现重复字母。这时想到了计数排序,用一个临时数组表示A~Z出现的次数,加入'A'在A中出现1次,那么 tmpArr[0] = 1;这时就先遍历A字符,并计数, 然后遍历字符串B 对tmpArr[*]做减法,当这一项的值小于0,表示A中出现此字符的次数不够,可返回失败结果,反之则包含.

public class Solution {
    /**
     * @param A : A string includes Upper Case letters
     * @param B : A string includes Upper Case letter
     * @return :  if string A contains all of the characters in B return true else return false
     */
    public boolean compareStrings(String A, String B) {
        // write your code here
        int[] countArr = new int[('Z' - 'A' + 1)];//countArr[0]=0 表示有0个'A'
        for(int i = 0; i < A.length(); i++){
            countArr[A.charAt(i) - 'A']++;//对A字符串出现的字符计数
        }   
        for(int i = 0; i < B.length(); i++){
            if(--countArr[B.charAt(i) - 'A'] < 0){
                return false;
            }
        }
        return true;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,803评论 19 139
  • 开学是在二月十八和十九,到这次放假,大二第二学期已经过了一个多月了,也是我开始在简书上阅读的时间,有的时候总是觉得...
    daisy呀阅读 1,261评论 2 3
  • 下雪了。 还是怀恋胖胖的陈真老师在妖风遍天的下午,聚一帮等他的人来上课,讲中国美术,讲西方美术。长长散散,期待十分...
    马川鹿阅读 3,138评论 1 1

友情链接更多精彩内容