2016-07-03 3 views
0

Я пытаюсь получить список всех подстрок ввода. для ввода = a, substrings {'', 'a'} для ввода = ab, подстроки {'', 'a', 'b', 'ab', 'ba'} для ввода = abc, substrings { '', 'а', 'б', 'с', 'аb', 'BC', 'ча', 'ба', 'Cb', 'ас', 'ABC', 'ACB', 'BAC' , 'bca', 'cab', 'cba'} и так далее.Получить все возможные подстроки в php

Код я попытался здесь

function get_substr($string){ 
     $array=str_split($string); 
     static $k=0; 
     for ($i=0; $i <count($array) ; $i++) { 
      for ($j=0; $j <count($array) ; $j++) { 
       $new_array[$k]=substr($string, $i, $j - $i + 1); 
       $k++; 

      } 
     } 
     return($new_array); 

    } 

и у меня есть о/р этого кода, как показано ниже

enter image description here

enter image description here

Пожалуйста, предложите мне, какие изменения мне нужно или любую альтернативную идею для этой работы.

+0

перестановка является решением –

+1

Ваш требуемый выходной * не * подстроки. 'ba' не является подстрокой 'abc'. – Eiko

+0

Извините за это @Eiko. Если у вас есть идеи по моей проблеме, пожалуйста. –

ответ

0
<?php 
// function to generate and print all N! permutations of $str. (N = strlen($str)). 
function permute($str,$i = null,$n = null) { 
    if(is_null($n)) $n = mb_strlen($str); 
    if(is_null($i)) $i = 0; 
    if ($i == $n) 
     print "$str \n"; 
    else { 
     for ($j = $i; $j < $n; $j++) { 
      swap($str,$i,$j); 
      permute($str, $i+1, $n); 
      swap($str,$i,$j); // backtrack. 
     } 
    } 
} 
// function to swap the char at pos $i and $j of $str. 
function swap(&$str,$i,$j) { 
    $temp = $str[$i]; 
    $str[$i] = $str[$j]; 
    $str[$j] = $temp; 
} 

$str = "hey"; 
permute($str); // call the function. 

увидеть это SO answer

+0

Если вы используете downvote, просьба указать, почему! – Iceman

+0

Вы можете удалить '$ n' из параметров. Это не C :) – vfsoraki

+1

И, возможно, используйте 'mb_strlen', чтобы быть в безопасности при проблемах с кодировкой. – vfsoraki

Смежные вопросы