草庐IT

php - 可能的词组

coder 2024-04-29 原文

这不是家庭作业:在工作时遇到这种情况 PHP String Differences and Dynamic Restrictions

给定一串 n 个单词,如何在不改变单词序列的情况下将它们分配到 m 个组中?

Example 1:
String: "My name is SparKot"
Groups: 2 (string is split in to two strings)

Possible groups will be:
('My', 'name is SparKot'), 
('My name', 'is SparKot'),
('My name is', 'SparKot')

使用相同的字符串

Example 2:
String: "My name is SparKot"
Groups: 3 (string will be split in to three strings)

Possible groups will be:
('My', 'name', 'is SparKot'),
('My', 'name is', 'SparKot'),
('My name', 'is', 'SparKot')

我的 PHP function() 没有方向(假设返回多维组):

function get_possible_groups ($orgWords, $groupCount, &$status) {

    $words = explode (' ', $orgWords);
    $wordCount = count($words);

    if ($wordCount < $groupCount) {
        $status = -1;
        return;
    } else if ($wordCount === $groupCount) {
        $status = 0;
        return (array_chunk($words, 1));
    }

    for ($idx =0; $idx < $wordCount; $idx) {
        for ($jdx =0; $jdx < $groupCount; $jdx++) {

        }
    }
//  append all arrays to form multidimension array
//  return groupings[][] array
}
$status =0;

$groupings = get_possible_groups('My name is SparKot', 4, $status);

var_dump($groupings);

对于上面的 example-2 函数应该返回:

$groupings = array (
        array ('My', 'name', 'is SparKot'),
        array ('My', 'name is', 'SparKot'),
        array ('My name', 'is', 'SparKot'));

任何解决此问题的提示都将不胜感激。

进度:

  • 案例:当wordCount = groupCount [已解决]

最佳答案

好吧,我花了很长时间,但我想我成功了。老实说,我真的很自豪,因为我通常不太擅长算法。无论如何,我们开始吧:

function getPossibleGroups($string, $groups) {
    $words = explode(' ', $string);
    $wordCount = count($words);

    if ($groups === 1) {
        return array(array($string));
    } elseif ($groups > $wordCount) {
        return null;
    } elseif ($groups === $wordCount) {
        return array($words);
    }

    $results = array();
    // We get every possible result for the first group
    for ($i = 1; $i <= $wordCount - $groups + 1; $i++) {
        $firstGroup = implode(' ', array_slice($words, 0, $i));

        // Recursively get all posible results for the other groups
        $otherGroups = getPossibleGroups(implode(' ', array_slice($words, $i)), $groups - 1);

        // Merge both things
        $allGroups = array_map(function($v) use ($firstGroup) {
            return array_merge(array($firstGroup), $v);
        }, $otherGroups);

        // Add that to the results variable
        $results = array_merge($results, $allGroups);
    }

    return $results;
}

关于php - 可能的词组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15144811/

有关php - 可能的词组的更多相关文章

  1. ruby - 如何以所有可能的方式将字符串拆分为长度最多为 3 的连续子字符串? - 2

    我试图获取一个长度在1到10之间的字符串,并输出将字符串分解为大小为1、2或3的连续子字符串的所有可能方式。例如:输入:123456将整数分割成单个字符,然后继续查找组合。该代码将返回以下所有数组。[1,2,3,4,5,6][12,3,4,5,6][1,23,4,5,6][1,2,34,5,6][1,2,3,45,6][1,2,3,4,56][12,34,5,6][12,3,45,6][12,3,4,56][1,23,45,6][1,2,34,56][1,23,4,56][12,34,56][123,4,5,6][1,234,5,6][1,2,345,6][1,2,3,456][123

  2. Ruby Regex,获取所有可能的匹配项(不截断字符串) - 2

    我遇到了ruby​​正则表达式的问题。我需要找到所有(可能重叠的)匹配项。这是问题的简化:#Simpleexample"Hey".scan(/../)=>["He"]#Actualresults#Withoverlappingmatchestheresultshouldbe=>["He"],["ey"]我尝试执行并获得所有结果的正则表达式如下所示:"aaaaaa".scan(/^(..+)\1+$/)#Thislooksformultiplesof(here)"a"biggerthanonethat"fills"theentirestring."aa"*3=>true,"aaa"*2=

  3. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  4. ruby-on-rails - 是否有可能发现 Ruby on Rails 应用程序中未使用哪些类? - 2

    在我们的项目中,我们有一些“被遗忘的”类存在了很长一段时间。那些类已被其他类替代,但我们忘记删除它们。是否有一些自动化的方法/工具可以发现Ruby{onRails}应用程序中没有使用哪些类?谢谢! 最佳答案 这个问题已经被提出了很多次,但是最好的答案都在这里:FindunusedcodeinaRailsapp我个人喜欢日志解析:https://stackoverflow.com/a/14161807但在任何情况下,您都可以创建自己的记录器,扩展ActiveRecord::Base以创建一个观察器,该观察器将最常用的模块存储在数据库中

  5. ruby - Class 怎么可能属于 Class 类而没有 Class 实例方法呢? - 2

    我正在研究Ruby解释器是如何实现的,并且出现了一个问题,但我还没有得到答案。这就是标题中的那个:因为Class(r_cClass)将super设置为自身(忽略元类,因为实际上super是r_cClass的元类),如果我向Class对象发送一个方法,这将在Class的方法表中查找'类(class)。但是Class的类是Class,所以我不应该最终寻找Class的实例方法吗?但事实并非如此,因为在文档中Class类方法和Class实例方法是分开的。在Ruby的eval.c中的search_method中,我没有发现对Class类有什么特别的检查。任何人都可以阐明这一点吗?

  6. ruby - 是否有可能在 Ruby 中以哈希的形式访问关键字参数? - 2

    我知道我能做到:classParentdefinitialize(args)args.eachdo|k,v|instance_variable_set("@#{k}",v)endendendclassA但我想使用关键字参数来更清楚地说明可以接受哪个散列键方法(并进行验证表明不支持此键)。所以我可以写:classAdefinitialize(param1:3,param2:4)@param1=param1@param2=param2endend但是有没有可能写一些更短的东西而不是@x=x;@y=y;...从传递的关键字参数初始化实例变量?是否可以访问作为哈希传递的关键字参数?

  7. ruby - 是否有可能缩小 ruby 常量查找 - 2

    我有一个模块,其中包含名为String的类(以及其他类。)我需要按名称查找该类,如果没有这样的类,则优雅地回退。moduleMod1moduleStringendendMod1.const_get'String'#⇒Mod1::StringKernel.const_get'::Mod1::String'#⇒Mod1::String到目前为止,还不错。当我尝试查找不存在的类时,我预计会收到NameError,这很好。问题是如果在全局命名空间中存在一个具有给定名称的类,它将被返回:Mod1.const_get'Fixnum'#⇒Fixnum我明白其中的原因,但我的问题是:是否有现成的方法仅

  8. ruby-on-rails - 有可能 CanCan can :manage, :all except one or more method? - 2

    我在做:can:manage,:allifuser.role=='admin'can:approve,Anunciodo|anuncio|anuncio.try(:aprovado)==falseend我的第二种方法不起作用,因为:manage:all覆盖了它。有一种方法可以声明可以管理除批准之外的所有内容吗?在里面批准我只是做can:approve,Anunciodo|anuncio|user.role=='admin'&&anuncio.try(:aprovado)==falseend什么是更好的解决方案? 最佳答案 尝试换一种

  9. ruby - 可能用三元运算符表达条件 HAML - 2

    试图想出一种更紧凑的方式来在HAML和Ruby中表达这个条件,也许使用三元运算符:-if@page.nil?%br(nothingyet)-else%br#{@page.name}(根据NeatwaytoconditionallytestwhethertoaddaclassinHAMLtemplate寻找类似的方法)您的帮助将不胜感激:) 最佳答案 您的代码使文本成为的子元素元素;这是不可取的。我认为,您真正的意思是:%br-if@page.nil?(nothingyet)-else#{@page.name}为此你可以简单地做:%b

  10. ruby - 如何在 Ruby 中为所有可能的值递增/递减一个字符? - 2

    我有一个长度为一个字符的字符串,可以是任何可能的字符值:irb(main):001:0>"\x0"=>"\u0000"我认为这可能有效:irb(main):002:0>"\x0"+=1SyntaxError:(irb):2:syntaxerror,unexpectedtOP_ASGN,expecting$end"\x0"+=1^from/opt/rh/ruby193/root/usr/bin/irb:12:in`'但是,如您所见,事实并非如此。我怎样才能增加/减少我的角色?编辑:Ruby似乎没有被设置为执行此操作。也许我正在以错误的方式接近这个。我想根据8位block来操作原始数据。我

随机推荐