题目:
给定两个字符串 s 和 t ,判断它们是否是同构的。
如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。
示例 1:
输入:s = "egg", t = "add"
输出:true
示例 2:
输入:s = "foo", t = "bar"
输出:false
示例 3:
输入:s = "paper", t = "title"
输出:true
提示:
- 1 <= s.length <= 5 * 104
- t.length == s.length
- s 和 t 由任意有效的 ASCII 字符组成
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/isomorphic-strings
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
把字符串s和字符串t都映射另一个集合中,这里可以映射成当前字符的下标+1,因为0为默认值,故将它的值设置成+1,最终将两个字符串所映射的字符串进行比较即可。
例如:
s = "egg"--->映射成122
t = "add"--->映射成122
两个字符串一样,即返回true。
s = "foo"--->映射成122
t = "bar"--->映射成123
两个字符串不一样,即返回false。
java代码:
解释:
int[] map = new int[128]
为什么设置成128:s 和 t 由任意有效的 ASCII 字符组成, ASCII 可以表示的字符个数是128个。
1 class Solution { 2 public boolean isIsomorphic(String s, String t) { 3 return isIsomorphicHelper(s).equals(isIsomorphicHelper(t)); 4 } 5 public String isIsomorphicHelper(String s){ 6 int[] map = new int[128]; 7 StringBuilder sb = new StringBuilder(); 8 int n = s.length(); 9 //给每个字母编号 10 for(int i = 0; i < n; i++){ 11 char c = s.charAt(i); 12 //如果当前字母未出现过,其值为下标+ 1 13 if(map[c] == 0){ 14 map[c] = i + 1; 15 } 16 sb.append(map[c]); 17 } 18 return sb.toString(); 19 } 20 }标签:字符,205,映射,map,int,力扣,128,字符串,java From: https://www.cnblogs.com/liu-myu/p/16751504.html