算法设计: 已知两个字符串s1="fg cdb cabcadr",s2="abc",运用链式存储结构存储这两个字符串,编写代码试求这两个串的长度,判断第二个字符串S2是否是第一个字符串s1的子串,并指出S2在S1中的位置。
时间: 2024-10-25 13:03:34 浏览: 59
sdb
算法设计可以采用多种方法来解决这个问题,这里我们使用Python的内置数据结构,如列表(List)来模拟链式存储结构,同时使用双指针策略来进行子串查找。首先我们需要计算两个字符串的长度,然后检查S2是否包含于S1。
```python
def chain_string_length(s1, s2):
# 计算字符串长度
len_s1 = len(s1)
len_s2 = len(s2)
return len_s1, len_s2
def is_substring_and_position(s1, s2):
# 使用双指针比较
i, j = 0, 0 # 初始化指针
while i < len(s1) and j < len(s2):
if s1[i] == s2[j]:
j += 1 # 如果匹配,则移动j指针
else:
i += 1 # 否则,移动i指针回到下一个字符
if j == len(s2): # 如果找到完整的s2,则找到了子串
return True, i - j # 返回True及子串起始位置
return False, -1 # 如果遍历完s1都没找到,则返回False和-1表示未找到
# 测试
s1 = "fg cdb cabcadr"
s2 = "abc"
lengths = chain_string_length(s1, s2)
is_sub, position = is_substring_and_position(s1, s2)
print(f"S1和S2的长度分别为{lengths[0]}和{lengths[1]}")
if is_sub:
print(f"S2 '{s2}' 是 S1 的子串,起始位置为 {position}")
else:
print(f"S2 '{s2}' 不是 S1 的子串")
```
阅读全文