• [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;
        }
    }
  • 相关阅读:
    多级联动系列——数组二级联动
    WebSocket初探
    8大最有气质的网络公司
    Quartz中时间表达式的设置-----corn表达式
    Servlet页面间对象传递的方法
    LSPCI具体解释分析
    CREATE PROCEDURE
    php实现工厂模式
    sql语法:inner join on, left join on, right join on具体用法
    C++虚函数表调用学习
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5731004.html
Copyright © 2020-2023  润新知