题解 | #牛的回文编号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; } };