【发布时间】:2022-10-01 00:26:34
【问题描述】:
我遇到了一个名为 leetcode 的特定问题有效回文.我的代码适用于除最后一个测试用例 479/480 之外的所有测试用例。
在这个测试用例中,传入了一个长度为 106890 的字符串,但我的代码需要很长时间才能解决它。
我决定尝试采用不同的方法并使用StringBuilder 类来反转字符串,然后简单地使用reversedString.equals(originalString) 来比较它们是否是回文。这种方法解决了问题并通过了所有测试用例
为什么我的两个指针方法不起作用?为什么它在最后一个测试用例上失败了?
这是我的解决方案(两个指针)
class Solution {
public static boolean isPalindrome(String s) {
String fixedString = \"\";
for (char c : s.toCharArray()) {
if (Character.isDigit(c) || Character.isLetter(c)) {
fixedString += c;
}
}
fixedString = fixedString.toLowerCase();
int i = 0;
int j = fixedString.length() - 1;
System.out.println(fixedString.toCharArray());
while (i <= j) {
if (fixedString.toCharArray()[i] != fixedString.toCharArray()[j]) {
return false;
}
i += 1;
j -= 1;
}
return true;
}
}
这是我使用StringBuilder 的第二个解决方案。
public class Valid_Palindrome {
public static void main(String args[]){
System.out.println(isPalindrome(\"A man, a plan, a canal: Panama\"));
}
public static boolean isPalindrome(String s) {
String fixedString = \"\";
for(char c : s.toCharArray()){
if(Character.isDigit(c) || Character.isLetter(c)){
fixedString += c;
}
}
fixedString = fixedString.toLowerCase();
StringBuilder sb = new StringBuilder(fixedString);
sb = sb.reverse();
System.out.println(sb);
return sb.toString().equals(fixedString);
}
}
从技术上讲,由于使用StringBuilder,第二个解决方案不是应该慢得多吗?
如何优化我的第一个解决方案?
这是在我的 leetcode 中传递的输入字符串。
标签: java string optimization stringbuilder palindrome