c语言找最长序列,leetcode522(最长特殊序列II)--C语言实现

求:

给定字符串列表,你需要从它们中找出最长的特殊序列。最长特殊序列定义如下:该序列为某字符串独有的最长子序列(即不能是其他字符串的子序列)。

子序列可以通过删去字符串中的某些字符实现,但不能改变剩余字符的相对顺序。空序列为所有字符串的子序列,任何字符串为其自身的子序列。

输入将是一个字符串列表,输出是最长特殊序列的长度。如果最长特殊序列不存在,返回 -1 。

示例:

输入: "aba", "cdc", "eae"

输出: 3

提示:

所有给定的字符串长度不会超过 10 。

给定字符串列表的长度将在 [2, 50 ] 之间。

解:

思路:这是leetcode521的变形题,2个字符串的比较变成了字符串数组的比较,但思路基本一致。(可以把2个字符串看做字符串数组的简化情形)

针对字符串数组,逐个检索字符串,判断它是否是某个字符串数组中的字符串的子串,如果都不是,判断它的长度是否大于当前记录的最大子序列长度,如果大于最大子序列长度,则更新最大子序列长度。完成字符串数组的遍历后,返回即可。注意这里子序列的定义,此处的包含并不是连续的包含字符,所以不能使用strstr库函数判断,需要自己实现一个函数。(我这里对应的函数是isContain())

int

isContain(

const

char

*a,

const

char

*b){

//查找b里是否有a

while

(*a!=

'

\

0

'

&& *b!=

'

\

0

'

){

if

(*a==*b)  a++;

b++;

}

return

*a==

'

\

0

'

?

1

:

0

;

}

int

findLUSlength(

char

** strs,

int

strsSize){

int

i,j,len,contain;

for

(i=

0,

len

=0

;i

contain =

0

;

for

(j=

0

;j

if

(j!=i && isContain(strs[i],strs[j])){

contain =

1

;

break

;

}

}

if

(!contain && strlen(strs[i])>len) len = strlen(strs[i]);

}

return

len?len:-

1

;

}

来源:oschina

链接:https://my.oschina.net/u/4469818/blog/4273833

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值