গণিত 337 418 372
ম্যাথমেটিক্স ব্যবহার করে বাস্তবায়ন করতে ব্যর্থ চেষ্টা করার পরে LongestCommonSubsequencePositions
, আমি প্যাটার্ন ম্যাচিংয়ের দিকে রইলাম।
v=Length;
p[t_]:=Subsets[t,{2}];
f[w_]:=Module[{c,x,s=Flatten,r={{a___,Longest[y__]},{y__,b___}}:>{{a,y},{y,b},{y},{a,y,b}}},
c=p@w;
x=SortBy[Cases[s[{#/.r,(Reverse@#)/.r}&/@c,1],{_,_,_,_}],v[#[[3]]]&][[-1]];
Append[Complement[w,{x[[1]],x[[2]]}],x[[4]]]]
g[r_]:=With[{h=Complement[r,Cases[Join[p@r,p@Reverse@r],y_/;!StringFreeQ@@y:>y[[2]]]]},
FixedPoint[f,Characters/@h,v@h-1]<>""]
প্যাটার্ন-মিলের নিয়ম,
r={{a___,Longest[y__]},{y__,b___}}:> {{a,y},{y,b},{y},{a,y,b}}},
শৃঙ্খলাবদ্ধ জোড় (অক্ষরের তালিকাগুলি হিসাবে উপস্থাপিত) নেয় এবং প্রত্যাবর্তন করে: (1) শব্দ {a,y}
এবং {y,b}
তারপরে (2) সাধারণ স্ট্রিং, y
যা অন্য শব্দের শুরুর সাথে একটি শব্দের প্রান্তকে যুক্ত করে এবং, অবশেষে, সম্মিলিত শব্দ {a,y,b}
যা ইনপুট শব্দগুলিকে প্রতিস্থাপন করবে। সম্পর্কিত উদাহরণের জন্য বেলিসারিয়াসটি দেখুন: /mathematica/6144/looking-for-longest-common-substring-solution
পরপর তিনটি আন্ডারস্কোর অক্ষর বোঝায় যে উপাদানটি শূন্য বা আরও বেশি অক্ষরের ক্রম।
Reverse
উভয় আদেশ পরীক্ষা করা হয়েছে তা নিশ্চিত করার জন্য পরে নিযুক্ত করা হয়। যে জোড়াগুলি লিঙ্কযোগ্য অক্ষরগুলি ভাগ করে তাদের অপরিবর্তিত এবং অগ্রাহ্য করা হয়।
সম্পাদনা করুন :
নীচে অন্য শব্দের "সমাধিযুক্ত" (অর্থাত্ সম্পূর্ণরূপে অন্তর্ভুক্ত) তালিকার তালিকা থেকে সরানো হয়েছে, (@ ফ্লর্নকোকের মন্তব্যের প্রতিক্রিয়া হিসাবে)।
h=Complement[r,Cases[Join[p@r,p@Reverse@r],x_/;!StringFreeQ@@x:> x[[2]]]]
উদাহরণ :
{{"D", "O", "L", "O", "R", "E"}, {"L", "O", "R", "E", "M"}} /. r
আয়
{D "ডি", "ও", "এল", "ও", "আর", "ই"}, L "এল", "ও", "আর", "ই", "এম"}, "এল", "ও", "আর", "ই"}, {"ডি", "ও", "এল", "ও", "আর", "ই", "এম"}
ব্যবহার
g[{"LOREM", "ORE", "R"}]
AbsoluteTiming[g[{"AD", "DO", "DOLOR", "DOLORE", "LOREM", "MAGNA", "SED", "ORE", "R"}]]
"Lorem"
{0.006256, "SedoloreMAGNAD"}