同构字符串
题目描述
给定两个字符串 s 和 t,判断它们是否是同构的 。
如果 s 中的字符可以按某种映射关系替换得到 t,那么这两个字符串是同构的 。
每个出现的字符都应当映射到另一个字符,同时不改变字符的顺序 。不同字符不能映射到同一个字符上,相同字符只能映射到同一个字符上 , 字符可以映射到自己本身 。
文章插图
1 例如
示例 1:输入:s = "egg", t = "add"输出:true示例 2:输入:s = "foo", t = "bar"输出:false示例 3:输入:s = "paper", t = "title"输出:true
2 分析:
我们可以利用一个 map 来处理映射 。对于 s 到 t 的映射,我们同时遍历 s 和 t,假设当前遇到的字母分别是 c1 和 c2;
若map[c1]存在,那么就判断 map[c1] 是否等于 c2,也就是验证之前的映射和当前的字母是否相同 。
若map[c1]不存在,就将c1 映射 c2,map[c1] = c2;
3 代码:
package com.johann.leetcode;/*题目:同构字符串1、例如:s="ab" t="bc"s->ta->bb->creturn true;2、例如:s="cca" t="aad"c->ac->aa->dreturn true;分析:我们可以利用一个 map 来处理映射 。对于 s 到 t 的映射 , 我们同时遍历 s 和 t , 假设当前遇到的字母分别是 c1 和 c2;若map[c1]存在,那么就判断 map[c1] 是否等于 c2,也就是验证之前的映射和当前的字母是否相同 。若map[c1]不存在,就将c1 映射 c2,map[c1] = c2;*/import java.util.HashMap;import java.util.Map;public class T205_IsomorphicString {//单向的s->tprivate static boolean isomorphic(String s, String t){//事先排除两字符串不相等的情况和排除""这种特殊情况if (s.length() != t.length() || t.isEmpty()) {System.out.println("输入不合法或字符串长度不一致");returnfalse;}//定义一个map映射,存储字符charMap map =new HashMap<>();//拿到长度int n = s.length();//循环遍历sfor (int i = 0; i < n; i++) {char c1 = s.charAt(i);char c2 = t.charAt(i);if (map.containsKey(c1)) {if (map.get(c1) != c2) {return false;}}else {map.put(c1,c2);}}return true;}//再递归调用一次,变成双向 , 即s->tt->sprivate static boolean bidirectionalIsomorphic(String s,String t){return isomorphic(s,t) && isomorphic(t,s);}public static void main(String[] args) {String s1="";String t1="ab";//System.out.println(isomorphic(s1,t1));//单向是trueSystem.out.println(bidirectionalIsomorphic(s1,t1)); //双向是false}}
4 链接:
【Leetcode205 同构字符串】我们的口号是:享受编码,快乐生活 欢迎关注哦~
- 在internet中,用字符串表示的IP地址称为
- 关于字符串,你知道这些么?
- 从零开始学Python第11课:常用数据结构之字符串
- 字符串转float STM32接收变量
- Medium-最长回文子串
- 一 Unicode 字符串排序规则:如何确定单个字符的顺序
- python定义一个字符串_python字符串列表的方法
- python学习1-数字、字符串、变量
- C语言学习笔记——字符串操作
- 编程乐趣:C#中按字符串截取长字符串