Leetcode - Isomorphic Strings

[分析]
思路1:维护两个哈希表,char[] map, boolean[] used, 长度均为256,map[charS] = charT, 表示将字符charS 映射为charT, used[charT]==true 表示charT已经被某个字符映射过了。同步遍历字符串s & t,记两者当前的字符分别为charS, charT, 若charS是新字符,且charT没有被使用,则我们可将其同charT建立映射关系,否则说明有两个不同的字符试图映射到同一个字符上,不符合要求;若charS已被建立映射关系,则检查charT是否和charS的映射字符相等,不相等不符合题目要求的“All occurrences of a character must be replaced with another character ”。
思路2:参考[url]https://leetcode.com/discuss/33854/my-6-lines-solution[/url],又是一个怎巧妙了得~ 这个思路也是用两个哈希表,不同于思路1直接将s中的字符映射到t中字符,它是将s 和 t中的字符同时映射到下标上,因为若个字符若存在映射关系,则必然是出现在相同的下标位置,实现中由于初始值为0,建立映射时使用 i + 1,以区分未映射状态和映射到下标为0的状态。


public class Solution {
// Method 2 https://leetcode.com/discuss/33854/my-6-lines-solution
public boolean isIsomorphic(String s, String t) {
int[] map1 = new int[256];
int[] map2 = new int[256];
for (int i = 0; i < s.length(); i++) {
if (map1[s.charAt(i)] != map2[t.charAt(i)])
return false;
map1[s.charAt(i)] = i + 1;
map2[t.charAt(i)] = i + 1;
}
return true;
}
// Method 1
public boolean isIsomorphic1(String s, String t) {
if (s == null || t == null) return false;
char[] map = new char[256];
boolean[] used = new boolean[256];
for (int i = 0; i < s.length(); i++) {
char charS = s.charAt(i);
char charT = t.charAt(i);
if (map[charS] == 0) {
if (used[charT]) return false; // No two characters may map to the same character
map[charS] = charT;
used[charT] = true;
} else if (map[charS] != charT){
return false; // All occurrences of a character must be replaced with another character
}
}
return true;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值