Isomorphic Strings

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Isomorphic Strings相关的知识,希望对你有一定的参考价值。

问题描述

给定两个字符串s和t,判断它们是否同构,是则返回true,否则返回false。

按照如下替换规则,如果字符串t能够通过替换字符串s中所有字符得到,则字符串s和字符串t同构。

  1. 替换时,必须保证字符串中各字符的出现顺序不变;
  2. 替换时,所有相同的字符只能被一个唯一字符替换;
  3. 替换时,不同的字符不能被同一个字符替换;
  4. 替换时,一个字符可以被它本身所替换。

注意:假定字符串s与字符串t长度相同。

 

输入示例

input1 input2 input3
"egg" "foo" "paper"
"add" "bar" "title"

  

 

 

 

输出示例

output1 output2 output3
true false true

 

 

 


算法实现

  1. 注意到这里只是针对字符,所以利用ASCII码的关系在对应的字符的数位上存储该字符在字符串中上一次出现的位置。
  2. 判断字符串s与字符串t在对应下标位置i上的字符在该字符串中上次出现的位置是否相同。
  3. 如果不同,则说明字符串s与字符串t不同构,返回false。
  4. 如果相同,至少说明字符串s的子字符串s.substring(0, i)与字符串t的子字符串t.substring(0, i)同构,应该继续判断字符串s与字符串t在对应下个位置上的字符在该字符串中上次出现的位置是否相同,直至到最后一个字符。如果最后一个字符的判断结果仍然相同,则说明字符串s与字符串t同构,返回true。
 1 public class Solution {
 2     public boolean isIsomorphic(String s, String t) {
 3         int[] m = new int[256];
 4         for(int i=0; i<s.length(); i++){
 5             if(m[s.charAt(i)] != m[t.charAt(i)+128]) return false;
 6             m[s.charAt(i)] = m[t.charAt(i)+128] = i+1;
 7         }
 8         return true;
 9     }
10 }

以上是关于Isomorphic Strings的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode-Isomorphic Strings

205. Isomorphic Strings [easy] (Python)

[LeetCode] 205 Isomorphic Strings

Java [Leetcode 205]Isomorphic Strings

LeetCode205. Isomorphic Strings

205. Isomorphic Strings