Skip to content

Latest commit

 

History

History
68 lines (46 loc) · 2.47 KB

张凯-20180708.md

File metadata and controls

68 lines (46 loc) · 2.47 KB

leetcode

问题:Distinct Subsequences

解答:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

//
// f(i, j) = f(i, j-1) + (s[j-1] == t[i-1] ? f(i-1,j-1) : 0)
//
int numDistinct(char* s, char* t) {
  size_t sl = strlen(s), tl = strlen(t), i, j;
  int** c = calloc(tl+1, sizeof(int *));
  for (i = 0; i <= tl; i++) {
    c[i] = calloc(sl+1, sizeof(int *));
  }

  for (i = 0; i <= sl; i++) {
    c[0][i] = 1;
  }

  for (i = 1; i <= tl; i++) {
    for (j = i; j <= sl; j++) {
      if (t[i-1] == s[j-1]) {
          c[i][j] = c[i-1][j-1];
      }

      c[i][j] += c[i][j-1];
    }
  }

  return c[tl][sl];
}

英文技术文章

文章:http://www.buyya.com/254/Patterns/Factory-2pp.pdf

对比了Factory MethodAbstract Factory的异同。

**创建模式(Creational Patterns)**抽象了创建过程,解少了业务逻辑和具体对象的耦合。具体又分:

  1. 类创建模式(class creational patterns),使用继承决定创建具体对象,也就是Factory Method
  2. 对象创建模式(object creational patterns),使用组合的方式委托给另外一个对象创建具体对象,也就是Abstract Factory

不同点:

  1. Factory Method通常用于创建一个对象,而Abstract Factory创建一组相关联的对象
  2. Factory Method通过继承复写(overwrite)的形式,依赖子类完成具体的对象创建,而Abstract Factory通过定义一个创建多个相关对象的接口,组合接口的实现来完成具体对象的创建,而这个接口的实现中页常常使用Factory Method

学习新的技术技巧

SRP(单一职责原则)

一个面向对象设计原则:一个函数、类、模块有且仅有一个修改的理由。

这个原则的好处显而易见,任何修改只会涉及到很少的代码,因此维护性很高,各个模块之间耦合度很低。但是,这个原则很简单但是又不容易做到,原因在于职责这个概念很难量化,同时在实现过程中由于团队、项目背景等等原因迫使必须违背这个原则。经验是:接口一定要遵循,具体实现类尽可能遵循。

分享文章

王垠的如何掌握所有的程序语言

掌握一门编程语言,重点是掌握它的语言特性。比如,掌握Golang,你应当掌握defer,goroutine,channel,iota等等特性,而不是具体的语法。