给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add"
输出: true
示例 2:
输入: s = "foo", t = "bar"
输出: false
示例 3:
输入: s = "paper", t = "title"
输出: true
思路:判断每一个字符串的元素顺序,然后以编号的形式写入StringBuffer中(比如:"egg",返回"ABB")。再比较两个字符串的返回值是否相同。直接看代码。
public class test0311 {
public static void main(String[] args) {
Solution S = new Solution();
String s = "baa";
String t = "caf";
boolean a = S.isIsomorphic(s,t);
System.out.println(a);
}
}
class Solution {
public boolean isIsomorphic(String s, String t) {
if(s.length() != t.length()){
return false;
}
return detection(s).equals(detection(t));
}
public String detection( String s){
StringBuffer str = new StringBuffer();
str.append ('A');
int count = 1;
for(int i = 1; i < s.length(); i++){
int a = judge( s, i);
if(a == -1){
//说明前面没出现过,添加一个新字符
str.append ((char)(65 + count));
count++;
}else{
//前面出现过,那把前面的字符再添加一次
str.append(str.charAt(a));
}
}
return str.toString();
}
public int judge(String s,int i){
//用来判断该字符是否出现过。
for(int j =0; j < i; j++){
if(s.charAt(i) == s.charAt(j)){
//如果出现过,返回其下标;
return j;
}
}
//如果没有返回-1;
return -1;
}
}