1. 程式人生 > >字元串同構問題——leetcode205/leetcode290

字元串同構問題——leetcode205/leetcode290

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 get t.

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;
				else
					return false;
			}else{
				if(hm.containsValue(ch2))
					return false;
				else
					hm.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 in pattern 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 key
public 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;
    }


相關推薦

字元問題——leetcode205/leetcode290

205. Isomorphic Strings 問題描述: Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the characters

字元

字元串同構 題目描述: 給定兩個字串 s 和 t ,確定它們是否是同構的。 兩個字串是同構的如果 s 中的字元可以被替換得到 t。 所有出現的字元必須用另一個字元代替,同時保留字串的順序。 沒有兩個字元可以對映到同一個字元,但一個字元可以對映到自己。 注意事項: 你可以假定兩個字串

字元判定

給定兩個字串,請編寫程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。這裡規定大小寫為不同字元,且考慮字串重點空格。 給定一個string stringA和一個string stringB,請返回一個bool,代表兩串是否重新排列後可相同。保證兩串的長度都小於等於5000。 測試樣例: "This

字元的最小表示方法

參考自     http://blog.csdn.net/zy691357966/article/details/39854359 最近做題碰到了字元串同構的題,就百度看了一下字元串同構的最小表示法

Leetcode 字元

今天用C#刷Leetcode,遇到字元串同構的題目,在網上看到兩種解法,第一種涉及到了c#中字典泛型,第二種用到了StringBuilder類,當在迴圈中將字串連在一起時,可以提升效能,各具特色,故分享之。 Question:Two words are called i

hihocoder 後綴自動機五·重復旋律8 求循環出現的次數

變換 iostream hihocode 復雜 img 進行 ron default data- 描述 小Hi平時的一大興趣愛好就是演奏鋼琴。我們知道一段音樂旋律可以被表示為一段數構成的數列。 小Hi發現旋律可以循環,每次把一段旋律裏面最前面一個音換到最後面就成為了

【leetcode 簡單】 第五十九題 字符

另一個 tco 保留 {} 簡單 urn code 映射 for 給定兩個字符串 s 和 t,判斷它們是否是同構的。 如果 s 中的字符可以被替換得到 t ,那麽這兩個字符串是同構的。 所有出現的字符都必須用另一個字符替換,同時保留字符的順序。兩個字符不能映射到同一個字符

LeetCode--205--字符

list() 不能 racket false -- 兩個 span nbsp bracket 問題描述: 給定兩個字符串 s 和 t,判斷它們是否是同構的。 如果 s 中的字符可以被替換得到 t ,那麽這兩個字符串是同構的。 所有出現的字符都必須用另一個字符替換,同時保留字

leetcode205字串

思想: 定義一個空字典reserve,先判斷s[i]是否再字典鍵中,若不在則繼續判斷t[i]是否在字典值中,若不在則賦值,若在則返回False。若在則判斷值是否相等,相等則繼續,反之則返回False。 class Solution: def isIsomorphic(self, s,

LeetCode205 字串

題目 給定兩個字串 s 和 t,判斷它們是否是同構的。 如果 s 中的字元可以被替換得到 t ,那麼這兩個字串是同構的。 所有出現的字元都必須用另一個字元替換,同時保留字元的順序。兩個字元不能對映到同一個字元上,但字元可以對映自己本身 示例 示例 1: 輸入:

【程式設計師面試經典】確定兩亂序

程式設計師面試經典 題目要求 給定兩個字串,請編寫程式,確定其中一個字串的字元重新排列後,能否變成另一個字串。這裡規定大小寫為不同字元,且考慮字串中的空格。 給定一個string stringA和一個string stringB,請返回一個bool,代表兩串是否重新排列後可相同。

讓這三個月來的更猛烈些吧,前端react項目

aso ssr seo ava git blog 發展 客戶端請求 功能 昨天一篇文章講述了我在這三個月中由.net到java的過程,其中踩坑填坑的細節真不是三言兩語可以道盡,而完成時的喜悅也遠非尋常可比(僅次於漲工資)。然而到這並不算完結,作為前後端分離的忠實粉絲,我認

【BZOJ3162】獨釣寒江雪 樹+DP

eight pri 相同 題解 con oid src str mil 【BZOJ3162】獨釣寒江雪 題解:先進行樹hash,方法是找重心,如果重心有兩個,則新建一個虛點將兩個重心連起來,新點即為新樹的重心。將重心當做根進行hash,hash函數不能太簡單,

React前後端如何,防止重復渲染

linux首先解釋React前後端同構、React首屏渲染的概念。然後通過這2個概念解決服務端渲染完成後瀏覽器端重復渲染的問題。什麽叫前後端同構?為了解決某些問題(比如SEO、提升渲染速度等)react 提供了2個方法在服務端生成一個HTML文本格式的字符串。在得到了這個HTML格式的字符串之後,通常會將其組

數(“數”是指這樣一種數,這個數右端的數平方後會得到這個數本身)

nbsp amp 所有 div 輸入數據 for 輸入 概念 pre 一、題目: “同構數”是指這樣一種數,這個數右端的數平方後會得到這個數本身。例如,5是25 右邊的數,25是625右邊的數,25和625都是同構數。找出a ~ b之間全部同構數。 Input 有多組數

刷題總結——樹的(bzoj4337 樹上hash)

inline rime sin com amp const 註意 turn input Description 樹是一種很常見的數據結構。 我們把N個點,N-1條邊的連通無向圖稱為樹。 若將某個點作為根,從根開始遍歷,則其它的點都有一個前驅,這個樹就成為有根樹。 對於兩個樹

POJ1635 Subway tree systems ——(判斷樹的,樹的最小表示法)

systems scan color end cto 同構 while scanf urn   給兩棵有根樹,判斷是否同構。因為同構的樹的最小表示法唯一,那麽用最小表示法表示這兩棵樹,即可判斷同構。順便如果是無根樹的話可以通過選出重心以後套用之前的方法。   AC代碼如下:

7-10 樹的(25 分)

lib tps ring pan ges 輸出 ble ram 技術 給定兩棵樹T1和T2。如果T1可以通過若幹次左右孩子互換就變成T2,則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點A、B、G的左右孩

PTA 樹的(25 分)

其中 content turn 不同 是否 std itl ng- class 7-1 樹的同構(25 分) 給定兩棵樹T1和T2。如果T1可以通過若幹次左右孩子互換就變成T2,則我們稱兩棵樹是“同構”的。例如圖1給出的兩棵樹就是同構的,因為我們把其中一棵樹的結點A、

直播|百安居前端架構師陳國興:如何使用React構建(isomorphic)應用

移動開發 java app開發 隨著前端的發展,為了用戶體驗,H5越來越多的使用SPA架構,導致JS代碼越來越多,體積也變的龐大,這時傳統的ajax方式在首屏訪問時就變得慢了,而且ajax在seo方面有天然的弱勢,這時服務端渲染又回來了。我們使用React搭配React Router等類庫來實現服