字符串同构问题——leetcode205/leetcode290

来源:互联网 发布:angela baby 知乎 编辑:程序博客网 时间:2024/04/30 11:10

205. Isomorphic Strings

问题描述:

Given two strings s and t, determine if they are isomorphic.

Two strings are isomorphic if the characters in s can be replaced to gett.

All occurrences of a character must be replaced with another character while preserving the order of characters. No two characters may map to the same character but a character may map to itself.

For example,
Given "egg", "add", return true.

Given "foo", "bar", return false.

Given "paper", "title", return true.

Note:
You may assume both s and t have the same length.


解析:

这个就是判断两个字符串是否是同构的,最简单的思路就是构造字符与字符之间的映射关系。

public boolean isIsomorphic(String s, String t) {       if(s==null || s.length()<=1)return true;HashMap<Character,Character> hm=new HashMap<Character,Character>();for(int i=0;i<s.length();i++){char ch1=s.charAt(i);char ch2=t.charAt(i);if(hm.containsKey(ch1)){if(hm.get(ch1)==ch2)continue;elsereturn false;}else{if(hm.containsValue(ch2))return false;elsehm.put(ch1, ch2);}}return true;    }

290. Word Pattern

问题描述:

Given a pattern and a string str, find if str follows the same pattern.

Here follow means a full match, such that there is a bijection between a letter inpattern and a non-empty word in str.

Examples:

  1. pattern = "abba", str = "dog cat cat dog" should return true.

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

  3. pattern = "aaaa", str = "dog cat cat dog" should return false.

  4. pattern = "abba", str = "dog dog dog dog" should return false.

Notes:
You may assume pattern contains only lowercase letters, and str contains lowercase letters separated by a single space.

解析:

这个题目是不是跟上一个很相似,解题思路也是很相似,不过参考了网友的厉害的解题方法,核心代码:

//my keypublic static boolean wordPattern_My(String pattern, String str) {if(pattern==null || str==null)return true;        String[] strs=str.split(" ");        if(pattern.length()!=strs.length)            return false;        HashMap<Character,String> map=new HashMap<Character,String>();         for(int i=0;i<pattern.length();i++){        if(map.containsKey(pattern.charAt(i))){        if(map.get(pattern.charAt(i)).equals(strs[i]))        continue;        else        return false;        }        else{        if(map.containsValue(strs[i]))        return false;        else        map.put(pattern.charAt(i), strs[i]);        }        }        return true;    }//网友的解析public static boolean wordPattern(String pattern, String str) {if(pattern==null || str==null)return true;        String[] strs=str.split(" ");        if(pattern.length()!=strs.length)            return false;        HashMap<Object,Integer> map=new HashMap<Object,Integer>();         for(int i=0;i<pattern.length();i++){        if(!Objects.equals(map.put(pattern.charAt(i),i),map.put(strs[i],i))){        return false;        }        }        return true;    }


0 0
原创粉丝点击