LeetCode链接

难度:简单
题目描述:给定两个字符串 s 和 t,判断它们是否是同构的。如果 s 中的字符可以按某种映射关系替换得到 t ,那么这两个字符串是同构的。每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上,字符可以映射到自己本身。

分析

本题主要判断两个字符串s和t是否为同构,同构简单的解释一下就是两个字符串的组成形式是否一致,例如s=egg,t=add,s为ABB形式组成的字符串,t也是为ABB形式组成的字符串。
清楚了什么是同构,就可以把问题简化成字符串s的组成形式和字符串t的组成形式之间的比较,也即ABB的比较,为了方便比较建议换成数字进行比较。

解题

  1. class Solution {
  2. public boolean isIsomorphic(String s, String t) {
  3. if (s.length() != t.length()) {
  4. return false;
  5. }
  6. int[] sInts = intsToStrings(s);
  7. int[] tInts = intsToStrings(t);
  8. for (int i = 0; i < s.length(); i++) {
  9. if (sInts[i] != tInts[i]) return false;
  10. }
  11. return true;
  12. }
  13. private int[] intsToStrings(String s) {
  14. Map<Character, Integer> maps = new HashMap<>();
  15. int[] result = new int[s.length()];
  16. for (int i = 0; i < s.length(); i++) {
  17. if (maps.containsKey(s.charAt(i))) {
  18. result[i] = maps.get(s.charAt(i));
  19. } else {
  20. maps.put(s.charAt(i), maps.size() + 1);
  21. result[i] = maps.get(s.charAt(i));
  22. }
  23. }
  24. return result;
  25. }

intsToStrings()方法主要将字符串转换成数字表示的形式数组。