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;
        }
    }
  • 相关阅读:
    001 课程定位和目标
    003 Python基本语法元素
    Oracle之用户和表空间
    基于SecureCRT的测试环境的克隆的linux/vi相关命令
    今日总结(linux和plsql)
    String小案例(**)、包装类型和普通数据类型的转换(拆装箱)
    Java基础再复习(继承、多态、方法内部类**、HashMap用法**、参数传递**)
    Servlet向JSP过渡
    控制层和ajax用法的详解
    注册页面的JSON响应方式详细分析(与前端页面交互方式之一)
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5731004.html
Copyright © 2011-2022 走看看