LeetCode 79.單詞搜索

原題鏈接:. - 力扣(LeetCode)

給定一個?m x n?二維字符網格?board?和一個字符串單詞?word?。如果?word?存在于網格中,返回?true?;否則,返回?false?。

單詞必須按照字母順序,通過相鄰的單元格內的字母構成,其中“相鄰”單元格是那些水平相鄰或垂直相鄰的單元格。同一個單元格內的字母不允許被重復使用。

示例 1:

輸入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCCED"
輸出:true

示例 2:

輸入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "SEE"
輸出:true

示例 3:

輸入:board = [["A","B","C","E"],["S","F","C","S"],["A","D","E","E"]], word = "ABCB"
輸出:false

提示:

  • m == board.length
  • n = board[i].length
  • 1 <= m, n <= 6
  • 1 <= word.length <= 15
  • board?和?word?僅由大小寫英文字母組成

思路:

本題可采用回溯的方法解決。對于 word 字符串,每匹配到一個字符 word.charAt(p) 后(假設在 board[ i ][ j ] 處匹配到),就遞歸匹配下一個字符 word.charAt(p+1)(在 board[ i ][ j + 1]、board[ i ][ j - 1]、board[ i +1 ][ j ]、board[ i +1 ][ j ] 處去嘗試匹配),如此類推。同時注意到對已經匹配的字符需要加一個標識,避免其被再次匹配到(可以給已經匹配的字符加一個 - 號,讓其不能再和word 中的字符匹配到)。

終止條件:假如 p == word.length(),則說明匹配成功。將 found 設置為 true,返回。假如 found 為 true,則說明之前已經匹配成功,返回,退出遞歸。假如 傳入的 i,j 不在 board 范圍內,返回。假如?board[ i ][ j ] 和 word.charAt(p) 不匹配,那么也退出當前這層遞歸,返回。

若匹配成功,則需要給 board[ i ][ j ] 加上一個已匹配的標識,然后去 board[ i ][ j ] 的上下左右四個方位去繼續匹配下一個字符。最后還需要取消標識,進行回溯。

代碼:

class Solution {boolean found = false;public boolean exist(char[][] board, String word) {int n = board.length,m=board[0].length;for(int i=0;i<n;i++){for(int j=0;j<m;j++){dfs(board,i,j,word,0);if(found){return true;}}}return false;}public void dfs(char[][] board,int i,int j,String word,int p){//word已經被匹配完畢,匹配成功if(p==word.length()){found = true;return;}if(found){return;}int n = board.length, m = board[0].length;if(i<0||j<0||i>=n||j>=m){return;}//若(i,j)處的字符不匹配word[p]if(board[i][j]!=word.charAt(p)){return;}//board(i,j)處的字符匹配上了word[p]//做個標記,避免匹配上的字符再被匹配board[i][j]= (char)(-board[i][j]);dfs(board,i,j-1,word,p+1);dfs(board,i,j+1,word,p+1);dfs(board,i-1,j,word,p+1);dfs(board,i+1,j,word,p+1);board[i][j]= (char)(-board[i][j]);}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/13645.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/13645.shtml
英文地址,請注明出處:http://en.pswp.cn/web/13645.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

若依前后端分離版本-前后端交互整理

ruoyi-ui與后端交互 方法一&#xff1a;表單 使用 headers: {Content-Type:application/x-www-form-urlencoded}, ruoyi-ui的vue中 //ruoyi-ui的vue中定義 formData: {a: 111,b: 111,c: 1,}, //vue中方法調用 outBound() { empty(this.formData).…

6款網頁表白代碼6(附帶源碼)

6款網頁表白代碼6 前言效果圖及部分源碼1.愛心倒計時2.一起看星星3.愛心4.愛心&#xff08;有鼠標移動特效&#xff09;5.愛心&#xff08;高級效果&#xff09;6.愛心&#xff08;3D效果&#xff09; 領取源碼下期更新預報 前言 大部分人都有喜歡的人&#xff0c;學會這些表白…

藍橋杯物聯網競賽_STM32L071KBU6_關于sizo of函數產生的BUG

首先現象是我在用LORA發送信息的時候&#xff0c;左邊顯示長度是8而右邊接收到的數據長度卻是4 我以為是OLED顯示屏壞了&#xff0c;又或者是我想搞創新用了const char* 類型強制轉換數據的原因&#xff0c;結果發現都不是 void Function_SendMsg( unsigned char* data){unsi…

微軟Edge

微軟Edge瀏覽器概述 功能介紹 微軟Edge是一款基于Chromium開源項目的網頁瀏覽器&#xff0c;旨在提供更快的網頁加載速度、更高的安全性和更好的用戶體驗。它支持多種操作系統&#xff0c;包括Windows、macOS、Android和iOS&#xff0c;能夠滿足不同用戶的需求。Edge瀏覽器擁…

趕緊收藏!2024 年最常見 20道 Redis面試題(三)

上一篇地址&#xff1a;趕緊收藏&#xff01;2024 年最常見 20道 Redis面試題&#xff08;二&#xff09;-CSDN博客 五、Redis的持久化機制是什么&#xff1f; Redis 是一個高性能的鍵值存儲系統&#xff0c;支持多種類型的數據結構&#xff0c;如字符串、哈希、列表、集合、…

python數據類型之字符串

目錄 1.字符串概念和注意事項 2.字符串內置函數 3.字符串的索引、切片和遍歷 4.字符串運算符 5.字符串常用方法 性質判斷 開頭結尾判斷 是否存在某個子串 大小寫等格式轉化 子串替換 刪除兩端空白字符 格式化字符串 分割與合并 6.字符串模板 7.exec 函數 8.字符…

【Linux】-Zookeeper安裝部署[17]

簡介 apache ZooKeeper是一個分布式的&#xff0c;開放源碼的分布式應用程序協調服務&#xff0c;是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件&#xff0c;提供的功能包括&#xff1a;配置維護、域名服務、分布式同步、組服務等。 除了為Hadoop和H…

2024最新 Jenkins + Docker 實戰教程(四) - 編寫自己的Springboot項目實現自動化部署

&#x1f604; 19年之后由于某些原因斷更了三年&#xff0c;23年重新揚帆起航&#xff0c;推出更多優質博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有堅忍不拔之志 &#x1f390; 個人CSND主頁——Mi…

VMware Num Lock 總自動切換的問題解決

VMware Num Lock 總自動切換的問題解決 0. 問題描述1. 解決方法 0. 問題描述 使用 VMware 虛擬機時&#xff0c;鼠標在 VMware 和主機之間切換時&#xff0c;總是顯示 “Num Lock 開” 和 “Num Lock 關” 的提示框。 1. 解決方法 在 VMware 系統中&#xff0c;按 fn num 統…

0407放大電路的頻率響應

放大電路的頻率響應 單時間常數RC電路的頻率響應中頻響應高頻響應低頻響應全頻域響應 放大電路頻率響應概述1. 直接耦合放大電路頻域響應阻容耦合放大電路頻域響應 4.7.1 單時間常數RC電路的頻率響應 4.7.2 放大電路頻率響應概述 4.7.3 單級共射極放大電路的頻率響應 4.7.4 單級…

TOSHIBA UTLH21 屬于Unifi NV系列

TOSHIBA UTLH21 是東芝推出的一款工業控制器&#xff0c;屬于Unifi NV系列。 這款控制器代表了東芝在工業自動化領域的一次重要進步&#xff0c;它在功能和性能上都超越了現有的V系列控制器。以下是UTLH21的一些主要特點&#xff1a; 高速邏輯與控制能力&#xff1a;UTLH21具…

Spring框架中獲取方法參數名稱:DefaultParameterNameDiscoverer

DefaultParameterNameDiscoverer 是Spring框架中用于獲取方法參數名稱的一個類。在Java中&#xff0c;方法的參數名稱通常在編譯時會丟失&#xff0c;因為Java字節碼并不強制要求保留這些信息。Spring提供了一種機制來恢復這些參數名稱&#xff0c;這就是通過DefaultParameterN…

IT行業的現狀與未來趨勢

這里寫目錄標題 一、引言二、IT行業的現狀三、IT行業面臨的挑戰四、IT行業的未來趨勢五、結論 一、引言 信息技術&#xff08;IT&#xff09;行業在過去幾十年中經歷了飛速發展&#xff0c;從早期的計算機硬件和軟件開發&#xff0c;到如今涵蓋云計算、人工智能、大數據、物聯…

深度學習之基于Django+Tensorflow卷積神經網絡實時口罩檢測系統

歡迎大家點贊、收藏、關注、評論啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代碼。 文章目錄 一項目簡介 二、功能三、系統四. 總結 一項目簡介 一、項目背景 隨著全球疫情的持續&#xff0c;佩戴口罩成為了公眾日常生活中不可或缺的一部分。特別是在人員密集的…

【python】python社交交友平臺系統設計與實現(源碼+數據庫)【獨一無二】

&#x1f449;博__主&#x1f448;&#xff1a;米碼收割機 &#x1f449;技__能&#x1f448;&#xff1a;C/Python語言 &#x1f449;公眾號&#x1f448;&#xff1a;測試開發自動化【獲取源碼商業合作】 &#x1f449;榮__譽&#x1f448;&#xff1a;阿里云博客專家博主、5…

BEVFuison測試全過程記錄

cuda版本10.1 pytorch&#xff1a; 根據cuda版本選擇pytorch版本&#xff1a; 1. 創建conda虛擬環境&#xff1a; conda create -y --name mmcv python3.8 conda activate mmcv2. 安裝依賴庫&#xff1a; pytorch: conda install pytorch1.7.1 torchvision0.8.2 torchaudi…

智能代理四大范式解析

Agent四大范式 在2024年紅杉資本人工智能峰會上,著名的人工智能專家吳恩達發表了一場備受關注的演講,深入探討了智能代理(agent)的四大范式。這四大范式代表了當前AI技術在不同應用領域中的核心方法和實踐,分別是反思(Reflection)、工具使用(Tool Use)、規劃(Planni…

特征融合篇 | YOLOv8改進之引入輕量級跨尺度特征融合模塊CCFM | 源自RT-DETR

前言:Hello大家好,我是小哥談。CCFM(Cross-Scale Feature Fusion Module)即為跨尺度特征融合模塊。這個模塊的作用是將不同尺度的特征通過融合操作整合起來,以增強模型對于尺度變化的適應性和對小尺度對象的檢測能力。CCFM可以有效地整合細節特征和上下文信息,從而提高模…

2024定制版搶單支付系統源碼(開代理自動搶單接單)

隨著網絡和移動支付技術的不斷進步&#xff0c;搶單支付系統已經成為商家和用戶進行交易的便利工具。2024定制版搶單支付系統源碼為開發者提供了一個可定制化的解決方案&#xff0c;具備開放代理和自動搶單接單功能&#xff0c;幫助用戶快速搭建搶單支付平臺。本文將為您介紹這…

專題匯編 | ChatGPT引領AIGC新浪潮(一)

ChatGPT的產生與迭代 2022年11月末,美國人工智能研究實驗室OpenAI推出ChatGPT。上線的ChatGPT只用了2個月,活躍用戶數就突破了1億,創造了應用增速最快的紀錄。 ChatGPT是什么 ChatGPT是一種人工智能技術驅動的自然語言處理(Natural Language Processing,NLP)工具,使用的…