leetcode——Isomorphic Strings
2016-07-10 21:54
369 查看
题目:
Given two strings s and t, determine if they are isomorphic.
Two strings are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.
For example,
Given "egg", "add", return true.
Given "foo", "bar", return false.
Given "paper", "title", return true.
方法一:
为两个字符串建立hash表,hash[ch]表示ch上一次出现的位置,比较两个字符串对应的字符上次出现的位置是否一样
方法二:
遍历字符串,建立起两个字符串字符的对应关系,这种对应关系可以用整数s[i] * 256 + t[i]唯一表示,后面遍历的时候比较映射值有没有变化即可。
Given two strings s and t, determine if they are isomorphic.
Two strings are isomorphic if the characters in s can be replaced to get t.
All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.
For example,
Given "egg", "add", return true.
Given "foo", "bar", return false.
Given "paper", "title", return true.
方法一:
为两个字符串建立hash表,hash[ch]表示ch上一次出现的位置,比较两个字符串对应的字符上次出现的位置是否一样
class Solution { public: bool isIsomorphic(string s, string t) { if (s.length() != t.length()) { return false; } int last_appear_s[256], last_appear_t[256]; memset(last_appear_s, -1, 256 * sizeof(int)); memset(last_appear_t, -1, 256 * sizeof(int)); bool is_ok = true; int length = s.length(); //每次比较当前字符上次出现的位置 for (int i = 0; i < length; ++i) { if (last_appear_s[s[i]] != last_appear_t[t[i]]) { is_ok = false; break; } last_appear_s[s[i]] = i; last_appear_t[t[i]] = i; } return is_ok; } };
方法二:
遍历字符串,建立起两个字符串字符的对应关系,这种对应关系可以用整数s[i] * 256 + t[i]唯一表示,后面遍历的时候比较映射值有没有变化即可。
class Solution { public: bool isIsomorphic(string s, string t) { if (s.length() != t.length()) { return false; } int diff1[256], diff2[256]; memset(diff1, -1, 256 * sizeof(int));//初始化为相同的值,保证第一次比较的时候相等 memset(diff2, -1, 256 * sizeof(int)); bool is_ok = true; int length = s.length(); //每次比较当前字符上次出现的位置 for (int i = 0; i < length; ++i) { if (diff2[t[i]] != diff1[s[i]]) { is_ok = false; break; } diff2[t[i]] = diff1[s[i]] = s[i] << 8 + t[i]; } return is_ok; } };
相关文章推荐
- c语言实现hashmap(转载)
- Ruby中Hash的11个问题解答
- Ruby简明教程之数组和Hash介绍
- 在C#中生成与PHP一样的MD5 Hash Code的方法
- js中hash和ico的关联分析
- 详解JavaScript中Hash Map映射结构的实现
- Javascript SHA-1:Secure Hash Algorithm
- 理解php Hash函数,增强密码安全
- Ruby中Hash哈希结构的基本操作方法小结
- PHP利用hash冲突漏洞进行DDoS攻击的方法分析
- PowerShell中定义哈希散列(Hash)和调用例子
- Redis String 类型和 Hash 类型学习笔记与总结
- php操作redis中的hash和zset类型数据的方法和代码例子
- Perl 哈希Hash用法之入门教程
- perl哈希hash的常见用法介绍
- php自定义hash函数实例
- php对文件进行hash运算的方法
- php常用hash加密函数
- PHP Hash算法:Times33算法代码实例
- php的hash算法介绍