原题网址:https://leetcode.com/problems/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.
For example,
Given "egg"
, "add"
, return true.
Given "foo"
, "bar"
, return false.
Given "paper"
, "title"
, return true.
Note:
You may assume both s and t have the same length.
方法:使用直方图来记录字符是否出现过,并对字符按照出现顺序进行编号。
public class Solution {
public boolean isIsomorphic(String s, String t) {
char[] sa = s.toCharArray();
char[] ta = t.toCharArray();
int[] sn = new int[256];
int[] tn = new int[256];
int sm = 0, tm = 0;
for(int i=0; i<sa.length; i++) {
if (sn[sa[i]] == 0) sn[sa[i]] = ++ sm;
if (tn[ta[i]] == 0) tn[ta[i]] = ++ tm;
if (sm != tm || sn[sa[i]] != tn[ta[i]]) return false;
}
return true;
}
}