题解 | #牛的回文编号II#
牛的回文编号II
https://www.nowcoder.com/practice/0b576fd673834425878b99c736bb6c34
考察的知识点:双指针;
解答方法分析:
- 定义一个空的字符串数组 str 来保存分割后的字符串。
- 使用
stringstream将字符串 x 按照小数点进行分割,并将分割后的字符串保存到 str 中。 - 对 str[0] 进行处理,找到第一个出现的字符 '0' 的位置 start,以及最后一个出现的字符 '0' 的位置 end。如果 start 为 -1,则不进行截取;否则,截取从 start 开始到 end 结束的子串并赋值给 str[0]。
- 对 str[1] 进行处理,找到第一个出现的字符 '0' 的位置 start。根据题目要求,如果 start 为 -1,则截取与 str[0] 长度相同的子串;否则,截取从开头到 start 结束的子串并赋值给 str[1]。
- 调用 isPalindromeStr 函数分别判断 str[0] 和 str[1] 是否是回文串。
- 如果两个字符串都是回文串,则返回 true;否则,返回 false。
所用编程语言:C++;
完整编程代码:↓
class Solution {
public:
bool isPalindromeNumber(string x) {
vector<string> str;
stringstream ss(x);
string token;
while (getline(ss, token, '.')) {
str.push_back(token);
}
int start = str[0].find('0');
int end = str[0].rfind('0');
str[0] = (start == -1) ? str[0] : str[0].substr(start,
(end == -1) ? str[0].length() : end);
start = str[1].find('0');
str[1] = str[1].substr(0, (start == -1) ? str[0].length() : start);
return isPalindromeStr(str[0]) && isPalindromeStr(str[1]);
}
private:
bool isPalindromeStr(string s) {
int i = 0, j = s.length() - 1;
while (i <= j) {
if (s[i] != s[j]) {
return false;
} else {
i++;
j--;
}
}
return true;
}
};


华为HUAWEI公司氛围 740人发布