[LintCode] 字符串置换 String Permutation

来源:互联网 发布:2017淘宝大学视频教程 编辑:程序博客网 时间:2024/06/07 14:50

给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。
置换的意思是,通过改变顺序可以使得两个字符串相等。

样例
“abc” 为 “cba” 的置换。
“aabc” 不是 “abcc” 的置换。

Given two strings, write a method to decide if one is a permutation of the other.
Example
abcd is a permutation of bcad, but abbe is not a permutation of abe

时O(n) 空O(n)

public class Solution {    /**     * @param A a string     * @param B a string     * @return a boolean     */    public boolean stringPermutation(String A, String B) {        if(A == B) return true;        if(null == A || null == B || A.length() != B.length()) return false;        if(A.equals(B)) return true;        Map<Character, Integer> map = new HashMap<Character, Integer>();        for(int i = 0; i < A.length(); i++) {            char a = A.charAt(i);            if(map.containsKey(a)) {                if(map.get(a)+1 == 0) {                    map.remove(a);                }else{                    map.put(a, map.get(a)+1);                }             }else {                map.put(a, 1);            }            char b = B.charAt(i);            if(map.containsKey(b)) {                if(map.get(b)-1 == 0) {                    map.remove(b);                }else{                    map.put(b, map.get(b)-1);                }            }else {                map.put(b, -1);            }        }        if(map.size() == 0)            return true;        else            return false;    }}
0 0
原创粉丝点击