55.Compare Strings-比较字符串(容易题)

原创 2016年08月28日 23:07:33

比较字符串

  1. 题目

    比较两个字符串A和B,确定A中是否包含B中所有的字符。字符串A和B中的字符都是 大写字母

    注意事项

    在 A 中出现的 B 字符串里的字符不需要连续或者有序。

  2. 样例

    给出 A = “ABCD” B = “ACD”,返回 true

    给出 A = “ABCD” B = “AABC”, 返回 false

  3. 题解

1.最简单的暴力解法就不解释了。

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) {
        if (B == null)
        {
            return true;
        }
        if (B.length() == 0)
        {
            return A != null;
        }
        if (A == null || A.length() < B.length())
        {
            return false;
        }

        char[] a = A.toCharArray();
        char[] b = B.toCharArray();
        int index = a.length-1;

        for (int j = 0; j < b.length; j++)
        {
            boolean bFind = false;
            for (int i = 0; i <= index; i++)
            {
                if (b[j] == a[i])
                {
                    char temp = a[index];
                    a[index] = a[i];
                    a[i] = temp;
                    index--;
                    bFind = true;
                    break;
                }
            }
            if (!bFind)
            {
                return false;
            }
        }

        return true;        
    }
}

2.HashMap的思想,为两个字符串建立两个长度为26的数组,按照A-0,B-1的顺序将字符串的字符全部装入数组,并将数组对应位置的值按个数计数,最后比较两个数组即可,O(n)。

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) {
        int[] arrA = new int[26];
        int[] arrB = new int[26];

        for (int i=0;i<A.length();i++)
        {
            arrA[A.charAt(i)-65]++;
        }
        for (int j=0;j<B.length();j++)
        {
            arrB[B.charAt(j)-65]++;
        }
        for (int k = 0;k<arrB.length;k++)
        {
            if (arrB[k] != 0 && arrB[k] > arrA[k])
            {
                return false;
            }
        }

        return true;
    }
}

Last Update 2016.8.28

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

lintcode55:比较两个字符串A和B,确定A中是否包含B中所有的字符。

*样例 给出 A = “ABCD” B = “ACD”,返回 true 给出 A = “ABCD” B = “AABC”, 返回 false 注意 在 A 中出现的 B 字符串里的字符不需要连...

细节杂记 移除字符串中的字符 remove indexof 字符串大小比较 compare

string a = new string(); ...//这里设置字符串a的值 //查找"string"并删除 int i = a.IndexOf("string"); a=a.Remove(i,...

55. 让接口容易正确使用且难以错误使用

让接口容易正确使用且难以错误使用         件开发中最常见的一项任务便是接口规范了。接口遍布于抽象的最高级(用户接口)、最低层(函数接口)以及中间的层次(类接口、库接口等)。不管你的工作是指定...

leetcode -- Multiply Strings -- python容易处理,需要看其他解法

https://leetcode.com/problems/multiply-strings/python 一行搞定。因为乘法结果太大的话,python会自动增加存储位数。这道题目还要看看其他解法。 ...
  • xyqzki
  • xyqzki
  • 2015年12月10日 18:18
  • 738

53.Reverse Words in a String-翻转字符串(容易题)

翻转字符串 题目给定一个字符串,逐个翻转字符串中的每个单词。 说明单词的构成:无空格字母构成一个单词 输入字符串是否包括前导或者尾随空格?可以包括,但是反转后的字符不能包括 如何处理两个单词间的...

[Amazon] Two Strings Are Anagrams (Compare Strings)

Write a method anagram(s,t) to decide if two strings are anagrams or not. What is Anagram? - Tw...

Ultra Compare 文件夹比较器

  • 2016年07月21日 15:58
  • 35.46MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:55.Compare Strings-比较字符串(容易题)
举报原因:
原因补充:

(最多只允许输入30个字)