63 - 同构字符串
Last updated
Was this helpful?
Last updated
Was this helpful?
给定两个字符串 s 和 t,判断它们是否是同构的。
如果 s 中的字符可以被替换得到 t ,那么这两个字符串是同构的。
所有出现的字符都必须用另一个字符替换,同时保留字符的顺序。两个字符不能映射到同一个字符上,但字符可以映射自己本身。
示例 1:
输入: s = "egg", t = "add" 输出: true
示例 2:
输入: s = "foo", t = "bar" 输出: false
示例 3:
输入: s = "paper", t = "title" 输出: true
说明: 你可以假设 s 和 t 具有相同的长度。
作者:vailing
链接:
建立一个哈希表来放对应
但一个表不能避免ab对应aa的情况,因此就再建一个表,对应相反的。
Runtime: 92 ms, faster than 9.57% of JavaScript online submissions forIsomorphic Strings.
Memory Usage: 36.8 MB, less than 29.41% of JavaScript online submissions for Isomorphic Strings.
速度有点慢哈
用map代替obj,也许能好一点点
Runtime: 76 ms, faster than 30.57% of JavaScript online submissions for Isomorphic Strings.
Memory Usage: 36.5 MB, less than 52.94% of JavaScript online submissions for Isomorphic Strings.
看到另一种解法:
作者:ldq-2
Runtime: 100 ms, faster than 6.74% of JavaScript online submissions for Isomorphic Strings.
Memory Usage: 35.8 MB, less than 70.59% of JavaScript online submissions for Isomorphic Strings.
内存占用得少,可能是因为判断没那么复杂了吧
这个骚操作说的是,不用管映射,如果两个字符串是同构的,那么他们的结构就是一样的。s重复字母的地方,t也会重复字母。
Runtime: 56 ms, faster than 95.90% of JavaScript online submissions for Isomorphic Strings.
Memory Usage: 35.2 MB, less than 88.24% of JavaScript online submissions for Isomorphic Strings.
第一个参数是要找的那串字符,在这里就是一个字母;第二个参数是开始检索的位置,最多到length-1
所以,如果字母后面有重复,而且重复的位置一样,那么就算通过;如果有重复,但地方不一样,那么结构就不一样。
感觉这是一下子击中了本质的做法😂😂
Runtime: 8 ms, faster than 13.98% of Go online submissions forIsomorphic Strings.
Memory Usage: 2.7 MB, less than 100.00% of Go online submissions for Isomorphic Strings.
go里面可以一个个取字符串,不过取出来的是其对应的utf-8的值,比如1对应的是49
不过无所谓,反正存的值是不会变的,只是类型定义的时候,存进去的就不是string,而是uint8
Runtime: 0 ms, faster than 100.00% of Go online submissions forIsomorphic Strings.
Memory Usage: 2.7 MB, less than 100.00% of Go online submissions for Isomorphic Strings.
链接:
indexOf
能返回值在字符串中首次出现的位置。