我有3个问题,或多或少相似。
给定一个整数数组,我想找到最长的连续子数组,这样子数组的数字就会递增。
给定一个整数数组,我想找到最长的连续子数组,这样子数组就有相同的数字。
给定一个字符数组,我想找到最长的连续子数组,以便子数组具有相同的字符。
我想在oops中充分利用可重用性和可扩展性的概念。我已经使用模板实现了一些代码。我试了一下,为问题2和3制作了一个类模板,因为它们只需要比较数字或字符的ascii值即可。但我不确定如何整合问题1的代码?我只是想知道如何从可重用性和使用继承的可扩展性的角度解决这些问题。
答案 0 :(得分:0)
Strategy pattern拯救:您可以定义一个封装匹配策略的接口,比如SubarrayMatcher
并创建两个实现,一个匹配“增加值的顺序”,另一个匹配“相同的值” ”。然后,您的主算法可以将接口作为参数并调用它来进行匹配。
伪代码中的高级结构:
Array<T> findLongestSubarray(Array<T> values, SubarrayMatcher<T> matcher);
interface SubarrayMatcher<T>
class IncreasingSubarrayMatcher<T> implements SubarrayMatcher<T>
class ConstantSubarrayMatcher<T> implements SubarrayMatcher<T>