c - 存储到“char”类型的空指针
问题描述
当我在 leetcode 上解决问题 3 时,我遇到了问题。我编写了代码,它在Dev-C++
编译器上工作,我复制代码并粘贴到 leetcode。得到这个错误:Line 10: Char 9: runtime error: store to null pointer of type 'char' (solution.c)
。我检查了代码,但找不到一些问题。我希望得到一些帮助。代码粘贴在下面。
int lengthOfLongestSubstring(char * s){
int longestlength = 0; // 最长子串的长度
int i = 0;
char *temp; // 存储子串
char *p;
char *base;
* temp = * s; // *temp存储s的第一个字符
base = temp;
while(*++s != '\0') {
p = base;
while(*p++ != '\0') {
if (*p == *s) {
*temp = '\0';
break;
}
}
if (*temp == '\0') {
*temp++ = *s;
base = temp;
i = 0; // 重新计数
}
else {
*++temp = *s;
++i;
}
longestlength = i > longestlength ? i : longestlength;
}
return longestlength;
}
测试示例
char* s = "pwwkew";
解决方案
该函数是 leetcode here提出的问题的建议解决方案。
据我了解,我们必须返回最长子字符串的长度而不重复字符。当最后一个字符出现在子字符串中的任何位置时,子字符串结束。
提供的代码存在许多问题。
- 错误是因为没有
temp
. base
是一个不是终止字符串的副本temp
,但它是用指针扫描的p
。i
在某些条件下增加,但从不重置为零。当一个新的子串开始时,它应该被重置为 0。- 等等
我看不出这段代码如何提供预期的答案。
算法如下。
我们从一个子字符串开始,它的第一个字母在 index 处i
(初始化为 0),我们考虑在 index 处子字符串的最后一个字符j
。我们检查字符是否存在于子字符串中。如果是,我们遇到了子字符串的结尾。它的长度是j-i
。longestLength
然后设置为最长长度和 的最大值j-i
。i
我们通过设置子字符串中重复字母之后的字母来开始一个新的子字符串。最后,我们增加j
.
这是代码
int lengthOfLongestSubstring(char *s){
if (s == NULL || *s == '\0')
return 0;
int longestlength = 1;
int i = 0, j = 1;
while (s[j] != '\0') {
// check if s[j] is in substring
int k = i;
while (k < j) {
if(s[k] == s[j])
break;
k++;
}
// if we found a duplicate letter at index k
if (k != j) {
// we reached the end of the substring
longestLength = j-i > longestLength ? j-i : longestLength;
// next substring start at k+1
// and is one character long
i = k+1;
j = i;
}
j++;
}
return longestLength;
}
推荐阅读
- gatsby - '..\node_modules\pngquant-bin\vendor\pngquant.exe' 丢失
- java - Java - 如何将对象添加到另一个对象的列表中
- python - pytorch:如何进行逐层乘法?
- node.js - util.promisify 旧库调用
- python - 如何使用 SQLAlchemy 连接到 PostgreSQL?
- node.js - 如何使用nodejsin angular 8连接mangodb
- django - 在带有自定义用户模型的模板中显示用户名作为欢迎消息
- java - 在 Android 中使用带有 onCreate() 的处理程序
- c++ - 从剪贴板获取内容时出现“应用程序调用了为不同线程编组的接口”错误
- ipad - UIDocumentPickerViewController 复制的文件在下载时消失以测试 iPad