finding the lowest common ancestor between 2 cells array
    1 回表示 (過去 30 日間)
  
       古いコメントを表示
    
Hi, I have a code that can find the lowest common ancestor ( lowest common character) and the common chaarcters for 2 vectors, the code is:
cc= ['a0.c2.b2.d6'] ;
pc= ['a0.c1.c3.d5'];
for i=1:min(length(pc),length(cc))
    if cc(i)==pc(i)
        q(i)=cc(i);
      else
         break   
      end
end
if strcmp(q,pc) | strcmp(q,cc)
       LCA=q;
else
disp('There is no LCA')
end
The problem of this code is that it takes the common character even if they are not has the same supnumber, like for eaxmple, the previous cc and pc , the answer will be :
There is no LCA
q =
a0.c
 note that it takes c as common between c2 and c1 which is not accepted. also it takes the 'dot' between character such as :
    cc= ['a0.c4.b2.d6'] ;
    pc= ['a0.c4.c3.d5'];
    for i=1:min(length(pc),length(cc))
        if cc(i)==pc(i)
            q(i)=cc(i);
        else
           break   
        end
    end
    if strcmp(q,pc) | strcmp(q,cc)
           LCA=q;
    else
    disp('There is no LCA')
    end
  q
the answer will be:
There is no LCA
q =
a0.c4.
advice me please
0 件のコメント
採用された回答
  Andrei Bobrov
      
      
 2012 年 11 月 8 日
        
      編集済み: Andrei Bobrov
      
      
 2012 年 11 月 8 日
  
      p1 = regexp(pc,'\.','split');
c1 = regexp(cc,'\.','split');
ii = ismember(p1,c1);
k = p1(1:find(ii == 0,1,'first')-1);
t = reshape([k;repmat({'.'},1,numel(k))],1,[]);
q = char(strcat(t{1:end-1}));
or
i1 = [0 strfind(pc,'.') numel(pc)+1];
i2 = [0 strfind(cc,'.') numel(cc)+1];
q = [];
for jj = 1:numel(i1)-1
    k = pc(i1(jj)+1:i1(jj+1)-1);
    if strcmp(k,cc(i2(jj)+1:i2(jj+1)-1))
        q = [q k '.'];
    else
        break
    end
end
q = q(1:end-1);
その他の回答 (0 件)
参考
カテゴリ
				Help Center および File Exchange で Data Import from MATLAB についてさらに検索
			
	Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

