[LintCode] 한 문자열 이 다른 문자열 의 모든 문 자 를 포함 하 는 지 판단 합 니 다.

3145 단어 알고리즘
문제 설명: 두 문자열 A 와 B 를 비교 하여 A 에 B 의 모든 문자 가 포함 되 어 있 는 지 확인 합 니 다.문자열 A 와 B 의 문 자 는 모두 대문자 이다.샘플 은 A = "ABCD" B = "ACD" 를 보 여 줍 니 다. true 는 A = "ABCD" B = "AABC" 를 보 여 줍 니 다. false 주의사항 이 A 에 나타 난 B 문자열 의 문 자 는 연속 적 이거 나 질서 가 필요 하지 않 습 니 다.
문제 분석: 한 장면 을 비유한다. 갑 과 을 이 가지 고 있 는 카드 A 부터 Z 까지 갑 이 가지 고 있 는 카드 를 판단 한다. 갑 이 을 이 가지 고 있 는 카드 를 먼저 갑 의 카드 하 쉬 를 한 번 보 자. A 부터 Z 까지 각각 몇 장 이 있 는 지 그 다음 에 A 에서 Z 까지 의 카드 를 순환 해서 을 이 가지 고 있 는 카드 를 빼 고 만약 에 어떤 자모의 장 수 를 마이너스 로 한다 면 false 로 돌아 갈 것 이다.
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
        if (A == B || A.equals(B)) {
            return true;
        }
        if (null == A || null == B || A.length() < B.length()) {
            return false;
        }
        Map map = new HashMap();
        for (int i = 0; i < A.length(); i++) {
            char a = A.charAt(i);
            if (map.containsKey(a)) {
                map.put(a, map.get(a) + 1);
            } else {
                map.put(a, 1);
            }
        }
        for (int j = 0; j < B.length(); j++) {
            char b = B.charAt(j);
            if (map.containsKey(b)) {
                map.put(b, map.get(b) - 1);
            }
            if (null == map.get(b) || map.get(b) < 0) {
                return false;
            }
        }
        return true;
    }
}

좋은 웹페이지 즐겨찾기