力扣205(java)-同构字符串(简单)

题目:

给定两个字符串 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 }

posted on 2022-10-03 22:43  我不想一直当菜鸟  阅读(159)  评论(0编辑  收藏  举报