211.字符串置换

描述

给出一个不含重复数字的排列,求这些数字的所有排列按字典序排序后该排列的编号。其中,编号从1开始。

样例

"abc" 为 "cba" 的置换。
"aabc" 不是 "abcc" 的置换。

代码

  1. O(n)
public class Solution {
    /**
     * @param A a string
     * @param B a string
     * @return a boolean
     */
    public boolean stringPermutation(String A, String B) {
        int[] cnt = new int[1000];
        for (int i = 0; i < A.length(); ++i) {
            cnt[(int)A.charAt(i)] += 1;
        }
        for (int i = 0; i < B.length(); ++i) {
            cnt[(int)B.charAt(i)] -= 1;
        }
        for (int i = 0; i < 1000; ++i) {
            if (cnt[i] != 0) {
                return false;
            }
        }
        return true;
    }
}
  1. O(nlogn)
public class Solution {
    /**
     * @param A a string
     * @param B a string
     * @return a boolean
     */
    public boolean Permutation(String A, String B) {
        if (A.length() != B.length()) {
            return false;
        }
        
        char[] listA = A.toCharArray();
        char[] listB = B.toCharArray();
        
        Arrays.sort(listA);   // O(nlogn)
        Arrays.sort(listB);
        
        for (int i = 0; i < listA.length; i++) {
            if (listA[i] != listB[i]) {
                return false;
            }
        }
        return true;
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符串的全排列 题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 例如输入字符串abc,则输出由字符a...
    MinoyJet阅读 13,860评论 4 11
  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 14,351评论 0 33
  • 标签(空格分隔): 算法 C++ 笔试 第三题:描述小王最近在开发一种新的游戏引擎,但是最近遇到了性能瓶颈。于是他...
    认真学计算机阅读 5,921评论 0 8
  • 给定两个字符串,请设计一个方法来判定其中一个字符串是否为另一个字符串的置换。置换的意思是,通过改变顺序可以使得两个...
    第六象限阅读 1,475评论 0 0
  • 1.字符串的排列 1.1.题目 题目描述 输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串a...
    chappie2017阅读 3,701评论 0 3