Doğru sırayla, dizelerin dizi ortak karakter bulun

2 Cevap php

Ben bir joker oluşturmak için, doğru sırayla, dizelerden oluşan bir dizi ortak karakter almak için bir işlev üzerinde çalışıyor gün geçirdi.

İşte benim problem açıklamak için bir örnektir. Ben yaklaşık 3 işlevleri yapılmış, ancak her harfin mutlak pozisyonu farklı olduğunda ben her zaman bir hata var.

En "+" "joker karakter" olduğunu varsayalım:

Array(
0 => '48ca135e0$5',
1 => 'b8ca136a0$5',
2 => 'c48ca13730$5',
3 => '48ca137a0$5');

Dönmelidir:

$wildcard='+8ca13+0$5';

Bu örnekte, zor bir şey olduğunu $array[2] diğerlerine göre 1 karakter daha fazlası gibi.

Diğer örnek:

Array(
0 => "case1b25.occHH&FmM",
1 => "case11b25.occHH&FmM",
2 => "case12b25.occHH&FmM",
3 => "case20b25.occHH&FmM1");

Dönmelidir:

$wildcard='case+b25.occHH&FmM+';

In this example, the tricky parts are :
- Repeating chars, such as 1 -> 11 in the "to delete" part, and c -> cc in the common part
- The "2" char in $array[2] & [3] in the "to delete" part is not in the same position
- The "1" char at the end of the last string

Ben bu işlev için bir çözüm bulamıyorum çünkü ben gerçekten yardıma ihtiyacım var ve benim uygulamanın bir ana parçasıdır.

Teşekkür peşin, ben mümkün olduğunca hızlı cevap verecektir, soru sormak için tereddüt etmeyin.

Mykeul

2 Cevap

Main code:
Step 1: Sort strings by length, shortest to longest, into array[]
Step 2: Compare string in array[0] and array[1] to get $temp_wildcard
Step 3: Compare string in array[2] with $temp_wildcard to create new $temp_wildcard
Step 4: Continue comparing each string with $temp_wildcard - the last $wildcard is your $temp_wildcard

Tamam, şimdi biz joker dize döndürmek için iki dizeleri karşılaştırmak için nasıl sorununa aşağı konum.

Subroutine code: Compare strings character-by-character, substituting wildcards into your return value when the comparison doesn't match.

Farklı uzunluklarda sorunu işlemek için, bu karşılaştırma ikinci dize bir ofset daha uzun olduğunu, her karakter için ekstra bir zaman çalıştırın. Joker karakter sayısını, döndürülen her dize için ([x] [x + offset]. STRING2 için string1 karşılaştırın). Altprogram joker karakter az sayıda cevap dönmelidir.

İyi şanslar!

Seems you want to create something like regular expression out of set of example strings. This might be quite tricki in general. Found this link, not sure if it's relevant: http://scholar.google.com/scholar?hl=en&rlz=1B3GGGL_enEE351EE351&q=%22regular%20expression%20by%20example%22&oq=&um=1&ie=UTF-8&sa=N&tab=ws

Eğer "0 veya daha fazla karakter" anlamına sadece belirli bir joker gerekiyorsa Öte yandan, o zaman çok daha kolay olmalıdır. Levenshtein distance algoritması 2 dizeleri arasındaki benzerliği hesaplar. Normalde tek sonuç tabi, ama sizin durumunuzda farklılıklar yerlerdir önemli olmasıdır. Ayrıca N dizeleri için bu uyum gerekir.

Bu yüzden (en azından metin algoritmalar ve dinamik programlama ile bazı pratik alırsınız) Bu algoritma çalışma ve umarım size sorunu çözmek için nasıl bazı fikirler alırsınız öneririz.

Heres algorithm in PHP: _http://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Levenshtein_distance#PHP

You might want also to search for PHP implementations of "diff". http://paulbutler.org/archives/a-simple-diff-algorithm-in-php/