字符串采用带头结点的单链表存储,设计算法在字符串S中删除从第i个位置开始,长度为len的字串;
时间: 2024-05-09 19:19:14 浏览: 55
1. 首先,根据i找到要删除的子串的前一个节点p和后一个节点q。
2. 将p的next指针指向q的next节点,即跳过要删除的子串。
3. 释放要删除的子串中的所有节点。
4. 返回删除后的字符串S。
具体实现:
```python
def delete_substring(head, i, length):
pre = head
for j in range(i-1):
pre = pre.next
cur = pre.next
for j in range(length):
temp = cur.next
cur.next = None
cur = temp
pre.next = cur
return head
```
时间复杂度为O(n),其中n为字符串的长度。
相关问题
设计算法在字符串S中删除从第i个位置开始,长度为len的字串;
1. 首先判断i和len的合法性,如果i<0或i+len>len(S),则返回原字符串S;
2. 将字符串S分为三部分:从0到i-1的子串、从i+len到末尾的子串以及从i到i+len-1的子串;
3. 将前两部分拼接起来,即可得到删除了从第i个位置开始,长度为len的子串后的字符串。
具体实现代码如下:
```python
def delete_substring(S, i, length):
if i < 0 or i + length > len(S):
return S
else:
return S[:i] + S[i+length:]
```
例如,对于字符串S="hello world",删除从第2个位置开始,长度为3的子串,即删除"llo",得到新字符串为"he world",可以调用函数delete_substring(S, 2, 3)实现。
编写一个程序,在字符串中删除指定位置pos开始长度为len的字串(字符串的字符个数不超过1000)。
```
#include <stdio.h>
#include <string.h>
int main()
{
char str[1001];
int pos, len;
printf("请输入字符串:");
gets(str);
printf("请输入要删除的位置和长度(用空格隔开):");
scanf("%d %d", &pos, &len);
int str_len = strlen(str);
if (pos >= str_len || pos < 0 || len < 0)
{
printf("输入的位置或长度不合法!\n");
return 0;
}
if (pos + len > str_len)
{
len = str_len - pos;
}
memmove(str + pos, str + pos + len, str_len - pos - len + 1);
printf("删除后的字符串为:%s\n", str);
return 0;
}
```
阅读全文