205. Isomorphic Strings(字符串同构)
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.
Example 1:
Input: s ="egg",
t ="add"
Output: true
Example 2:
Input: s ="foo",
t ="bar"
Output: false
Example 3:
Input: s ="paper",
t ="title"
Output: true
解释:就是像以前语文题的 aabb型 开开心心和快快乐乐就是字符同构。
方法一:记录摆放位置
public boolean isIsomorphic(String s, String t) { int[] preIndexOfS = new int[256]; int[] preIndexOfT = new int[256]; for (int i = 0; i < s.length(); i++) { char sc = s.charAt(i), tc = t.charAt(i); if (preIndexOfS[sc] != preIndexOfT[tc]) { return false; } preIndexOfS[sc] = i + 1; preIndexOfT[tc] = i + 1; } return true; }
方法二:用hashMap记录对应关系
public class Solution { public boolean isIsomorphic(String s, String t) { HashMap<Character,Character> map=new HashMap<Character,Character>(); for(int i=0;i<s.length();i++){ char a=s.charAt(i),b=t.charAt(i); if(map.containsKey(a)){ if(map.get(a)!=b){ return false; } }else{ if(!map.containsValue(b)){ map.put(a,b); }else{ return false; } } } return true; } }
苟有恒,何必三更眠五更起;最无益,莫过一日暴十日寒。