zoukankan      html  css  js  c++  java
  • Cracking the coding interview--Q1.3

    原文

    Given two strings, write a method to decide if one is a permutation of the other.

    译文

    给你两个字符串,写一个方法来判断其中一个是不是另一个的permutation。如果两个字符串含有相同的字符,仅仅是顺序可能不同,那么他们就叫permutations。例如"ABCDEF"和"FEDCBA",我们可以认为它们是permutation。

    解答

    如果长度不同,则一定不是,否则我们可以先将两个字符串内的字符按字典序排序,然后再判断是否相等。

    import java.util.Arrays;
    
    public class Main {
    
        public static boolean isPermutation (String s1, String s2) {
            if(s1.length() != s2.length())
                return false;
            if(s1.equals(s2))
                return true;
            char a[] = s1.toCharArray();
            char b[] = s2.toCharArray();
            Arrays.sort(a);
            Arrays.sort(b);
            return Arrays.toString(a).equals(Arrays.toString(b));
        }
            
        public static void main(String args[]) {
            String s1 = "ABCDEF";
            String s2 = "FEDCBA";
            String s3 = "ABCDEE";
            System.out.println(isPermutation(s1,s2));
            System.out.println(isPermutation(s1,s3));
        }
    }

    O(n)的解法

    由于组成变位词的字符是一模一样的, 因此我们可以先统计每个字符串中各个字符出现的次数, 然后看这两个字符串中各字符出现次数是否一样。如果是,则它们是一对变位词。 这需要开一个辅助数组来保存各字符的出现次数。我们可以开一个大小是256的整数数组, 遍历第一个字符串时,将相应字符出现的次数加1;遍历第二个字符串时, 将相应字符出现的次数减1。最后如果数组中256个数都为0,说明两个字符串是一对变位词。 (第1个字符串中出现的字符都被第2个字符串出现的字符抵消了), 如果数组中有一个不为0,说明它们不是一对变位词。

    public static boolean isPermutation2 (String s1, String s2) {
            int len = s1.length();
            if(len != s2.length())
                return false;
            if(s1.equals(s2))
                return true;
            int [] count = new int[256];
            for(int i = 0; i < 256; i++) {
                count[i] = 0;
            }
            for(int i = 0; i < len; i++) {
                count[s1.charAt(i)]++;
                count[s2.charAt(i)]--;
            }
            for(int i = 0; i < 256; i++) {
                if(count[i] != 0)
                    return false;
            }
            return true;
        }
  • 相关阅读:
    Fuck,什么破书
    数组指针与指针数组的问题
    .....不敢私藏,魂淡啊...游戏程序员们懂的
    毕业设计做个3D赛车游戏
    原来是这样的,所噶
    出来混,迟早都是要还的
    Struts2源码学习DefaultConfiguration的RuntimeConfigurationImpl方法(运行期改造)
    Struts2中拦截器实现AOP的原理分析
    人生的两个方向:一个是出门,一个是回家(转载)
    Struts 2框架结构图
  • 原文地址:https://www.cnblogs.com/giraffe/p/3186026.html
Copyright © 2011-2022 走看看