zoukankan      html  css  js  c++  java
  • lintcode-158-两个字符串是变位词

    158-两个字符串是变位词

    写出一个函数 anagram(s, t) 判断两个字符串是否可以通过改变字母的顺序变成一样的字符串。

    说明

    What is Anagram?

    • Two strings are anagram if they can be the same after change the order of characters.

    样例

    给出 s = "abcd",t="dcab",返回 true.
    给出 s = "ab", t = "ab", 返回 true.
    给出 s = "ab", t = "ac", 返回 false.

    挑战

    O(n) time, O(1) extra space

    标签

    字符串处理 Cracking The Coding Interview

    思路

    可以先将 2 个字符串排序,然后逐个对比字符串每位是否相同,但排序需要 O(nlogn) 的时间复杂度
    所以可以使用 hash 的方式,开辟 2 个 128 位的空间,记录 2 个字符串每种字符出现的次数,然后比较次数是否相同,若相同,是变位词,不同,则不是变位词

    code

    class Solution {
    public:
        /**
         * @param s: The first string
         * @param b: The second string
         * @return true or false
         */
        bool anagram(string s, string t) {
            // write your code here
            int sizeS = s.size(), sizeT = t.size() , i = 0;
            if (sizeS == 0 && sizeT == 0) {
                return true;
            }
            if (sizeS != sizeT) {
                return false;
            }
    
            int hashS[128] = { 0 };
            int hashT[128] = { 0 };
            for (i = 0; i < sizeS; i++) {
                hashS[s[i]]++;
                hashT[t[i]]++;
            }
            for (i = 0; i < 128; i++) {
                if (hashS[i] != hashT[i]) {
                    return false;
                }
            }
            return true;
        }
    };
    
  • 相关阅读:
    封装

    如何通过命令行窗口查看sqlite数据库文件
    标签控件
    信息提示框
    循环
    数组
    switch
    成员局部变量
    变量
  • 原文地址:https://www.cnblogs.com/libaoquan/p/7262637.html
Copyright © 2011-2022 走看看