zoukankan      html  css  js  c++  java
  • 判断两个字符串s1 s2所含字符是否相同

    题目摘自CareerCup-Top 150 Questions 4th

    描述如下:

    Write a method to decide if two strings are anagrams or not

    解答如下:

    分析:两个字符串是否相同,解法1就是把这两个字符串一排序,然后看是否==

    解法2是分析两个字符串都含有多少个不同的字符,每个不同的字符含有几个,比如说字符串"abcdefab"含有6个不同字符,分别是a b c d e f,其中各个字符的个数分别是2 2 1 1 1 1 ,那么解法2就可以比较两个字符串这个个数是否相等。代码如下

    说明:

    letters数组里面存放各个字符的个数

    num_unique_chars 里存放字符串有多少个不同的char字符

    num_completed是存放两个字符串s1 s2已经完成比对的字符个数

     1 public static boolean anagram(String s, String t) {
     2     if (s.length() != t.length()) { return false; }
     3     int[] letters = new int[256];
     4     int num_unique_chars = 0;
     5     int num_completed = 0;
     6     char[] s_array = s.toCharArray();
     7     for (char c : s_array) {
     8         if (letters[c] == 0) { ++num_unique_chars; }
     9         ++letters[c];
    10     }
    11     for (int i = 0; i < t.length(); ++i) {
    12         int c = (int) t.charAt(i);
    13         if (letters[c] == 0) { return false; }
    14         --letters[c];
    15         if (letters[c] == 0) {
    16             ++num_completed_t;
    17             if (num_completed_t == num_completed_t) {
    18                 return i == t.length();
    19             }
    20         }
    21     }
    22     return false;
    23 }
  • 相关阅读:
    UVA 10462 Is There A Second Way Left?(次小生成树&Prim&Kruskal)题解
    POJ 1679 The Unique MST (次小生成树)题解
    POJ 2373 Dividing the Path (单调队列优化DP)题解
    BZOJ 2709 迷宫花园
    BZOJ 1270 雷涛的小猫
    BZOJ 2834 回家的路
    BZOJ 2506 calc
    BZOJ 3124 直径
    BZOJ 4416 阶乘字符串
    BZOJ 3930 选数
  • 原文地址:https://www.cnblogs.com/ziyoudefeng/p/2706378.html
Copyright © 2011-2022 走看看