題目
已知:乙個二維字元矩陣,乙個單詞;
輸出:該單詞是否可以從二維矩陣中拼接出來?拼接規則:從矩陣的某一行的某個字母開始,持續向臨近的字元擴充套件(向上,向下,向左,向右),直至拼接出該單詞。若可以拼出,則輸出false,若拼不出,則輸出false;
例如:
【a,b,c,d,e
e,f,g,h,u
a,b,s,d,f
】 單詞為abcgh,輸出true;
單詞為fghdsb,輸出true;
單詞為efgu,輸出false;
思路 dfs
用visited儲存當前dfs路徑;
對於矩陣每個點作為起始點dfs,每個點,移動有4個可能(4個鄰居),一次dfs需要移動word.length次;
實現:
對於visited,實現方式多種:
1)boolean
2)hashset 將二維轉換為一惟;
public
static
boolean
exist(char board,string word)}}
return
false;
}//dfs,遞迴,需要記錄擴充套件次數;每個dfs,需要擴充套件word.length次後結束;
private
static
boolean
haspath(int pos, int x, int y, string word,char board, hashsetvisited)
else
}else;
int y=;
for(int i=0;i<4;i++)}}
visited.remove(x+board[0].length+y);
return
false;
}else}}
//判斷位置是否有效
private
static
boolean
isvalid(int newx, int newy, char board) else
}
字串「最」系列
最近練手,整理了乙個 最 系列的主題,這些題目有點繞,個別的還有別名 詳見博文 混在一塊比較亂,就索性放在一起做了個整理,區別的時候要注意子串行與子串的不同,前者不要求連續,後者要求連續 由於大部分跟dp有關,而且一些題目還可以漸進尋求多種解法,可以用來做不錯的練手。下面是這些問題的博文目錄 1 最...
字串系列 SA
高一還不會sa就退役吧 uoj 35.字尾排序 這是一道模板題。讀入乙個長度為 n nn 的由小寫英文本母組成的字串,請把這個字串的所有非空字尾按字典序從小到大排序,然後按順序輸出字尾的第乙個字元在原串中的位置。位置編號為 1 11 到 nnn。除此之外為了進一步證明你確實有給字尾排序的超能力,請另...
字串dp系列
647.回文子串 給定乙個字串,你的任務是計算這個字串中有多少個回文子串。具有不同開始位置或結束位置的子串,即使是由相同的字元組成,也會被計為是不同的子串。示例 1 輸入 abc 輸出 3 解釋 三個回文子串 a b c 示例 2 輸入 aaa 輸出 6 說明 6個回文子串 a a a aa aa ...