Trend Micro 2011 笔试题

求一个字符串的最长不重复子串长度。如 "abcdefgd"的最长不重复子串为"abcdefg",长度为7。在做题的时候没带草稿纸,导致试卷上有很多涂改,而且还忘记处理字符串结尾部分。#include <map> #include <cstdio> #include <cstring> using namespace std; int search(char* str, int len) { map<char, int> m; if (len <= 0) return -1; if (len == 1) return 1; int p1 = 0, p2 = 1, idx, ret = 1; m.insert(pair<char, int>(str[p1], p1)); while (p2 < len) { if (m.find(str[p2]) != m.end()) { idx = m.find(str[p2])->second; if (p2 - p1 > ret) ret = p2 - p1; while (p1 <= idx) { m.erase(str[p1]); p1++; } } m.insert(pair<char, int>(str[p2], p2)); p2++; } if (p2 - p1 > ret) ret = p2 - p1; return ret; } int main() { char *s = "1234567845678"; printf("%d/n", search(s, strlen(s))); return 0; }

你可能感兴趣的:(Trend Micro 2011 笔试题)