LeetCode---Isomorphic Strings、Word Pattern解题分析

来源:互联网 发布:js滚动选择控件 编辑:程序博客网 时间:2024/05/16 12:29

题意描述

Isomorphic Strings(同构字符串):给定两个字符串,判断它们是否为同构字符串,如下:

Given "egg", "add", return true.Given "foo", "bar", return false.Given "paper", "title", return true.


Word Pattern(单词模型):给定两个字符串,一个是由字符组成,另是一个是由字符串组成,判断它们是否为同构字符串,如下:

pattern = "abba", str = "dog cat cat dog" should return true.pattern = "abba", str = "dog cat cat fish" should return false.pattern = "aaaa", str = "dog cat cat dog" should return false.pattern = "abba", str = "dog dog dog dog" should return false.


解题分析

Isomorphic Strings(同构字符串)相当于考察两个字符串的形式是否相同,想到利用map表这个特殊的数据结构,str1中的每个字符对应str2中的每个字符。

提交失败"aa""ab"=>false(是对的);"ab""aa"=>true(错误),所以方法应该验证字符之间的一一对应关系验证字符之间一一对应的关系,利用set

public class Solution {    public boolean isIsomorphic(String s, String t) {        if(s.length() != t.length())//两字符串长度不相等return false;Map<Character, Character> map = new HashMap<Character, Character>();Set<Character> set = new HashSet<Character>();for(int i=0; i<s.length(); i++){char ch = s.charAt(i);if(map.containsKey(ch)){if(!map.get(ch).equals(t.charAt(i)))return false;}else{if(set.contains(t.charAt(i)))//保证单词之间一一对应的关系return false;map.put(s.charAt(i), t.charAt(i));set.add(t.charAt(i));}}return true;    }}


Word Pattern(单词模型):与上面的解题思路基本一样,代码如下:

public class Solution {    public boolean wordPattern(String pattern, String str) {        String[] strs = str.split(" ");if(pattern.length() != strs.length)return false;//pattern的长度应该和字符串的长度一致才能进行匹配,否则不匹配Map<Character, String> map = new HashMap<>();//char与String的映射Set<String> unique = new HashSet<>();//保存String,避免出现多对一的情况for(int i=0; i<pattern.length(); i++){char c = pattern.charAt(i);if(map.containsKey(c)){if(!map.get(c).equals(strs[i]))return false;}else{if(unique.contains(strs[i])) return false;map.put(c, strs[i]);unique.add(strs[i]);}}return true;    }}







0 0
原创粉丝点击