• LeetCode: Scramble String


    这题看了网上答案

     1 class Solution {
     2 public:
     3     bool isScramble(string s1, string s2) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         if (s1.size() != s2.size()) return false;
     7         map<char, int> S1, S2;
     8         for (int i = 0; i < s1.size(); i++) S1[s1[i]]++;
     9         for (int i = 0; i < s2.size(); i++) S2[s2[i]]++;
    10         if (S1 != S2) return false;
    11         if (s1.size() == 1) return true;
    12         for (int i = 1; i < s1.size(); i++) {
    13             bool flag = isScramble(s1.substr(0, i), s2.substr(0, i)) && isScramble(s1.substr(i, s1.size()-i), s2.substr(i, s2.size()-i));
    14             flag = flag || (isScramble(s1.substr(0, i), s2.substr(s2.size()-i, i)) && isScramble(s1.substr(i, s1.size()-i), s2.substr(0, s2.size()-i)));
    15             if (flag) return true;
    16         }
    17         return false;
    18     }
    19 };

     三维DP更牛逼!

     1 class Solution {
     2 public:
     3     bool isScramble(string s1, string s2) {
     4         if (s1.size() != s2.size()) return false;
     5         int n = s1.size();
     6         vector<vector<vector<bool> > > f(n, vector<vector<bool> >(n, vector<bool>(n)));
     7         for (int i = 0; i < n; ++i) {
     8             for (int j = 0; j < n; ++j) {
     9                 f[i][j][0] = (s1[i] == s2[j]);
    10             }
    11         }
    12         for (int l = 1; l < n; ++l) {
    13             for (int i = 0; i+l < n; ++i) {
    14                 for (int j = 0; j+l < n; ++j) {
    15                     for (int k = 0; k < l; ++k) {
    16                         f[i][j][l] = f[i][j][l] || (f[i][j][k] && f[i+k+1][j+k+1][l-1-k] || f[i][j+l-k][k] && f[i+k+1][j][l-1-k]);
    17                     }
    18                 }
    19             }
    20         }
    21         return f[0][0][n-1];
    22     }
    23 };

     C#

     1 public class Solution {
     2     public bool IsScramble(string s1, string s2) {
     3         if (s1.Length != s2.Length) return false;
     4         Dictionary<char, int> S1 = new Dictionary<char, int>();
     5         Dictionary<char, int> S2 = new Dictionary<char, int>();
     6         for (int i = 0; i < s1.Length; i++) {
     7             if (S1.ContainsKey(s1[i])) S1[s1[i]]++;
     8             else S1.Add(s1[i], 1);
     9         }
    10         for (int i = 0; i < s2.Length; i++) {
    11             if (S2.ContainsKey(s2[i])) S2[s2[i]]++;
    12             else S2.Add(s2[i], 1);
    13         }
    14         foreach (var v in S1) {
    15             if (!S2.ContainsKey(v.Key) || v.Value != S2[v.Key]) return false;
    16         }
    17         if (s1.Length == 1) return true;
    18         for (int i = 1; i < s1.Length; i++) {
    19             bool flag = IsScramble(s1.Substring(0, i), s2.Substring(0, i)) && IsScramble(s1.Substring(i, s1.Length-i), s2.Substring(i, s2.Length-i));
    20             flag = flag || (IsScramble(s1.Substring(0, i), s2.Substring(s2.Length-i, i)) && IsScramble(s1.Substring(i, s1.Length-i), s2.Substring(0, s2.Length-i)));
    21             if (flag) return true;
    22         }
    23         return false;
    24     }
    25 }
    View Code
  • 相关阅读:
    Java反编译代码分析(一)
    Java信号量Semaphore
    Ubuntu SVN安装&使用&命令
    Android -- Dialog动画
    Android -- EventBus使用
    Android -- queryIntentActivities
    解决:fatal: authentication failed for https
    MySQL表名大小写敏感导致的问题
    Publish to a Linux Production Environment
    layer.js 弹窗组件API文档
  • 原文地址:https://www.cnblogs.com/yingzhongwen/p/3085034.html
Copyright © 2020-2023  润新知