zoukankan      html  css  js  c++  java
  • [LintCode]判断一个字符串是否包含另一个字符串的所有字符

    问题描述:

    比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

    样例

    给出 A = "ABCD" B = "ACD",返回 true

    给出 A = "ABCD" B = "AABC", 返回 false

    注意事项

    在 A 中出现的 B 字符串里的字符不需要连续或者有序。

    问题分析:

    实质上利用的是哈希表的思想。只有大写字母,一共26个,遍历A的时候,往里面压,遍历B的时候,往外边弹,如果不够弹,则不包含。

    问题解决:

    一种比较麻烦的解法:

    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
            Map<String, Integer> map = new HashMap<String, Integer>();
            for (int i = 0; i < 26; i++) {
                map.put((char)(i + 'A') + "", 0);
            }
            for (int i = 0; i < A.length(); i++) {
                String key = A.charAt(i) + "";
                Integer count = map.get(key);
                map.put(key, ++count);
            }
            for (int i = 0; i < B.length(); i++) {
                String key = B.charAt(i) + "";
                Integer count = map.get(key);
                if (map.containsKey(key)) {
                    map.put(key, --count);
                }
                if (count < 0) {
                    return false;
                }
            }
            return true;
        }
    }

    一种简单的解法(本质一样):

    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[] index = new int[26];
            for (int i = 0; i < A.length(); i++) {
                index[A.charAt(i) - 'A']++;
            }
            for (int i = 0; i < B.length(); i++) {
                index[B.charAt(i) - 'A']--;
                if(index[B.charAt(i) - 'A'] < 0){
                    return false;
                }
            }
            return true;
        }
    }
  • 相关阅读:
    linux下php调试工具xdebug安装配置
    linux下php开发环境搭建(nginx+php+mysql)
    centos7使用docker部署gitlab-ce-zh应用
    CentOS7上Docker安装与卸载
    struts2 中 paramsPrepareParamsStack 拦截器
    ModelDriven & Preparable 接口
    OLW Test
    sqlserver 错误:2,错误40
    C#时间截
    http post发送
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5731004.html
Copyright © 2011-2022 走看看