• Isomorphic Strings 解答


    Question

    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.

    Solution 1

    Use hashmap, remember to check both key and value. Time complexity O(n^2), space cost O(n).

    hashMap.containsValue costs O(n)

     1 public class Solution {
     2     public boolean isIsomorphic(String s, String t) {
     3         if (s == null || t == null)
     4             return false;
     5         if (s.length() != t.length())
     6             return false;
     7         if(s.length()==0 && t.length()==0)
     8             return true;
     9         int length = s.length();
    10         Map<Character, Character> map = new HashMap<Character, Character>();
    11         for (int i = 0; i < length; i++) {
    12             char tmp1 = s.charAt(i);
    13             char tmp2 = t.charAt(i);
    14             if (map.containsKey(tmp1)) {
    15                 if (map.get(tmp1) != tmp2)
    16                     return false;
    17             } else if (map.containsValue(tmp2)) {
    18                 return false;
    19             } else {
    20                 map.put(tmp1, tmp2);
    21             }
    22         }
    23         return true;
    24     }
    25 }

     Solution 2

    Use extra space to reduce time complexity.

     1 public class Solution {
     2     public boolean isIsomorphic(String s, String t) {
     3         if (s == null || t == null)
     4             return false;
     5         if (s.length() != t.length())
     6             return false;
     7         if(s.length()==0 && t.length()==0)
     8             return true;
     9         int length = s.length();
    10         Map<Character, Character> map = new HashMap<Character, Character>();
    11         Set<Character> counts = new HashSet<Character>();
    12         for (int i = 0; i < length; i++) {
    13             char tmp1 = s.charAt(i);
    14             char tmp2 = t.charAt(i);
    15             if (map.containsKey(tmp1)) {
    16                 if (map.get(tmp1) != tmp2)
    17                     return false;
    18             } else if (counts.contains(tmp2)) {
    19                 return false;
    20             } else {
    21                 map.put(tmp1, tmp2);
    22                 counts.add(tmp2);
    23             }
    24         }
    25         return true;
    26     }
    27 }
  • 相关阅读:
    win10安装mysql5.7.20解压版
    mvn snapshot
    git SSH key
    Grails踩坑记
    oracle数据库中使用hibernate生成表不能正确创建表
    有些人
    制定短期计划(3月9-4.29)
    有些话
    Linux中mysql主从复制
    Linux下安装mysql
  • 原文地址:https://www.cnblogs.com/ireneyanglan/p/4806088.html
Copyright © 2020-2023  润新知