zoukankan      html  css  js  c++  java
  • Hash Table Five Finish

    (1)Word Pattern

    解题思路一:使用HashMap,将字符串转化为字符串数组,并行遍历字符和字符串数组,比较它们上一次(最后一次)出现的位置,如果不相同返回false,遍历完成后返回true。

    代码如下:

     1 public class Solution {
     2     public boolean wordPattern(String pattern, String str) {
     3         String[] words = str.split(" ");
     4         if (words.length != pattern.length()) {
     5             return false;
     6         }
     7         Map index = new HashMap();
     8         for (Integer i = 0; i < words.length; i++) {
     9             if (index.put(words[i], i) != index.put(pattern.charAt(i), i)){
    10                 return false;
    11             }
    12         }
    13         return true;
    14     }
    15 }
    View Code

    注意:字符串分割为字符数组string.split(" ")。pattern.put( , )返回的是上一次保存的位置。

    int是基本数据类型。Integer是其包装类,注意是一个类,是对int的扩展,定义了很多转换方法。比如,现在int要转为String  int a=0; String result=Integer.toString(a);在java中,包装类比较多的用途是用在于各种数据类型的转化中。

    解题思路二:依然使用HashMap,char和string一一对应,同时将string保存在set,避免多对一的情况。

    代码如下:

     1 public class Solution {  
     2     public boolean wordPattern(String pattern, String str) {  
     3         //input check  
     4           
     5         String[] strs = str.split(" ");  
     6         if(pattern.length() != strs.length  ) return false;  
     7           
     8         Map<Character, String> map = new HashMap<>();  
     9         Set<String> unique = new HashSet<>();  
    10           
    11         for(int i=0; i<pattern.length(); i++) {  
    12             char c = pattern.charAt(i);  
    13             if(map.containsKey(c) ) {  
    14                 if(!map.get(c).equals(strs[i])) return false;  
    15             } else {  
    16                 if(unique.contains(strs[i])) return false;  
    17                 map.put(c, strs[i]);  
    18                 unique.add(strs[i]);  
    19             }  
    20         }  
    21         return true;  
    22     }  
    23 }  
    View Code

    (2) Valid Sudoku

    题目本意:检查该九宫格中每行每列每个小九宫格中是否有重复元素。

    难点在于表示第i个九宫格每个格子的坐标。

    观察行号规律:

    第0个九宫格:000111222; 第1个九宫格:000111222; 第2个九宫格:000111222;

    第3个九宫格:333444555; 第4个九宫格:333444555; 第5个九宫格:333444555;

    第6个九宫格:666777888; 第7个九宫格:666777888; 第8个九宫格:666777888;

    可见对于每三个九宫格行号增3;对于单个九宫格,每三个格点行号增1。

    因此第i个九宫格的第j个格点的行号可表示为i/3*3+j/3

    观察列号规律:

    第0个九宫格:012012012; 第1个九宫格:345345345; 第2个九宫格:678678678;

    第3个九宫格:012012012; 第4个九宫格:345345345; 第5个九宫格:678678678;

    第6个九宫格:012012012; 第7个九宫格:345345345; 第8个九宫格:678678678;

    可见对于下个九宫格列号增3,循环周期为3;对于单个九宫格,每个格点行号增1,周期也为3。

    周期的数学表示就是取模运算mod。

    因此第i个九宫格的第j个格点的列号可表示为i%3*3+j%3

    使用HashSet来进行操作,set.add()用来向Set集合添加对象。如果Set集合中不包含要添加的对象,则添加对象并返回true;如果Set集合中已经包含相同的对象,返回false。

    代码如下:

     1 public class Solution {
     2     public boolean isValidSudoku(char[][] board) {
     3     for(int i = 0; i<9; i++){
     4         HashSet<Character> rows = new HashSet<Character>();
     5         HashSet<Character> columns = new HashSet<Character>();
     6         HashSet<Character> cube = new HashSet<Character>();
     7         for (int j = 0; j < 9;j++){
     8             //if(board[i][j]!='.' && rows.add(board[i][j]) !=true)
     9             if(board[i][j]!='.' && !rows.add(board[i][j]))
    10                 return false;
    11             if(board[j][i]!='.' && !columns.add(board[j][i]))
    12                 return false;
    13             int RowIndex = 3*(i/3);
    14             int ColIndex = 3*(i%3);
    15             if(board[RowIndex + j/3][ColIndex + j%3]!='.' && !cube.add(board[RowIndex + j/3][ColIndex + j%3]))
    16                 return false;
    17         }
    18     }
    19     return true;
    20   }
    21 }
    View Code
  • 相关阅读:
    codeforces 19B Checkout Assistant DP
    bzoj1053: [HAOI2007]反素数ant [搜索]
    【2017泉州基地校集训】雷神领域[二分图][并查集]
    bzoj1433: [ZJOI2009]假期的宿舍 [二分图][二分图最大匹配]
    bzoj 1059: [ZJOI2007]矩阵游戏 [二分图][二分图最大匹配]
    二分图带权匹配-Kuhn-Munkres算法模板 [二分图带权匹配]
    luogu P1332 血色先锋队[bfs]
    匈牙利算法dfs模板 [二分图][二分图最大匹配]
    【2017泉州基地校集训】最优排名[贪心]
    最大流Dinic算法的一些优化 [网络流][最大流]
  • 原文地址:https://www.cnblogs.com/struggleli/p/6182393.html
Copyright © 2011-2022 走看看