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;
        }
    }
  • 相关阅读:
    String.Format使用方法
    在gfs2中关闭selinux
    开发板怎样开启telnet服务
    Google App Engine 学习和实践
    Ewebeditor最新漏洞及漏洞大全
    为HttpStatusCodeResult加入customErrors
    【android】下载文件至本应用程序的file文件夹或者sdcard
    java entry
    关闭对话框,OnClose和OnCancel
    主成分分析(PCA)
  • 原文地址:https://www.cnblogs.com/DarrenChan/p/5731004.html
Copyright © 2011-2022 走看看