给定一个只包含数字的字符串,复原它并返回所有可能的 IP 地址格式。
暴力破解吧,没太多技巧。
bool ipTest(string s) {
if (s.empty())
return false;
if (s.length() > 3) return false;
if (s.length() == 1) return true;
if (s.length() < 3 && s[0] == '0') return false;
if (s.length() < 3) return true;
return s <= "255";
}
vector<string> restoreIpAddresses(string s) {
vector<string> output;
for (int l1 = 0; l1 < s.length() && l1 < 3; l1++) {
if (!ipTest(s.substr(0, l1 + 1)))
break;
for (int l2 = l1 + 1; l2 < s.length() && l2 < l1 + 4; l2++) {
if (!ipTest(s.substr(l1 + 1, l2 - l1)))
break;
for (int l3 = l2 + 1; l3 < s.length() && l3 < l2 + 4; l3++) {
if (!ipTest(s.substr(l2 + 1, l3 - l2)))
break;
for (int l4 = l3 + 1; l4 < s.length() && l4 < l3 + 4; l4++) {
if (!ipTest(s.substr(l3 + 1, l4 - l3)))
break;
if (l4 == s.length() - 1) {
string tmp = s.substr(0, l1 + 1) + '.' +
s.substr(l1 + 1, l2 - l1) + '.' +
s.substr(l2 + 1, l3 - l2) + '.' +
s.substr(l3 + 1, l4 - l3);
output.push_back(tmp);
}
}
}
}
}
return output;
}


本文探讨了一种通过暴力破解复原数字字符串为IP地址格式的算法。详细介绍了判断子串是否符合IP段规则的函数ipTest,以及主函数restoreIpAddresses如何遍历字符串,寻找所有可能的IP地址组合。
807

被折叠的 条评论
为什么被折叠?



