• LeetCode 热题 C++ 79. 单词搜索


    力扣79

    给定一个 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
    • boardword 仅由大小写英文字母组成

    思路:

    dfs。

    遇到的坑:一开始每次用的是减少字符串,用substr的,但是这样会超时。

    所以再增加一个变量k,每次要比较的就是word[k]和当前字母。

    代码:

    1. class Solution {
    2. public:
    3. int dx[4]={-1,0,1,0};
    4. int dy[4]={0,-1,0,1};
    5. int d[10][10];
    6. bool dfs(int x,int y,vectorchar>>& board,string s,int k)
    7. {
    8. if(s.length()==k)
    9. {
    10. return true;
    11. }
    12. for(int i=0;i<4;i++)
    13. {
    14. int x1=x+dx[i];
    15. int y1=y+dy[i];
    16. if(x1<0||x1>board.size()-1||y1<0||y1>board[0].size()-1||d[x1][y1]==1)continue;
    17. //cout<
    18. if(board[x1][y1]!=s[k])continue;
    19. d[x1][y1]=1;
    20. if(s.size()>1){
    21. if(dfs(x1,y1,board,s,k+1))return true;
    22. }
    23. else{
    24. return true;
    25. }
    26. d[x1][y1]=0;
    27. }
    28. return false;
    29. }
    30. bool exist(vectorchar>>& board, string word) {
    31. int n=board.size();
    32. int m=board[0].size();
    33. for(int i=0;i
    34. {
    35. for(int j=0;j
    36. {
    37. if(board[i][j]==word[0]){
    38. memset(d,0,sizeof(d));
    39. d[i][j]=1;
    40. if(word.size()>1){
    41. if(dfs(i,j,board,word,1))return true;
    42. }
    43. else return true;
    44. }
    45. }
    46. }
    47. return false;
    48. }
    49. };

     

  • 相关阅读:
    CDGA|维护企业数据安全的六大管控措施
    Vector | Graph:蚂蚁首个开源Graph RAG框架设计解读
    信而泰 X-Snapper测试系统,助力家庭路由器IPv6支持度测试
    Scrum的三个内置子模式 | 图解敏捷系列
    Oracle【ORA-00600 internal error code arguments [2662]】恢复一例
    TS的类型转换
    知道策略模式!但不会在项目里使用?
    Pulsar 也会重复消费?
    Modbus通信协议
    Android开发基础——Kotlin简介
  • 原文地址:https://blog.csdn.net/Zero_979/article/details/127988930