StringBuilder 在 Java 中如何反向工作?
How does StringBuilder reverse work in Java?
我正在尝试解决这个 leetcode 问题
https://leetcode.com/problems/palindrome-linked-list/ ,但 运行 遇到字符串和字符串生成器的问题。出于某种原因,"12".equals"21" -> returns 为真。
我尝试从字符串构建器转换为字符串,并且只使用字符串构建器。
class Solution {
public boolean isPalindrome(ListNode head) {
StringBuilder s = new StringBuilder();
while (head != null) {
s.append(head.val);
head = head.next;
}
String a = s.reverse().toString();
String b = s.toString();
return a.equals(b);
}
}
“12”测试用例失败,returns 正确。
StringBuilder reverse
不生成新的 StringBuilder 实例。它会导致当前 StringBuilder 的底层字符被反转。所以,
String a = s.reverse().toString();
String b = s.toString();
第二个s.toString()
在反向操作StringBuilder
。
你必须做
String original = s.toString();
String reversed = s.reverse().toString();
return original.equals(reversed);
这是一个仅使用 2 个 StringBuilder 而不是 3 个并且不使用 built-in 反向方法的方法。相反,while 循环遍历链表,将当前节点附加到 original
StringBuilder,并将当前节点插入到 reversed
StringBuilder 的前面。所以 built-in 插入方法有助于反转节点值的顺序:
public boolean isPalindrome(ListNode head) {
StringBuilder original = new StringBuilder(), reversed = new StringBuilder();
ListNode curr = head;
while (curr != null) {
original.append(curr.val);
reversed.insert(0, curr.val);
curr = curr.next;
}
return original.toString().equals(reversed.toString()) ? true : false;
}
我正在尝试解决这个 leetcode 问题 https://leetcode.com/problems/palindrome-linked-list/ ,但 运行 遇到字符串和字符串生成器的问题。出于某种原因,"12".equals"21" -> returns 为真。
我尝试从字符串构建器转换为字符串,并且只使用字符串构建器。
class Solution {
public boolean isPalindrome(ListNode head) {
StringBuilder s = new StringBuilder();
while (head != null) {
s.append(head.val);
head = head.next;
}
String a = s.reverse().toString();
String b = s.toString();
return a.equals(b);
}
}
“12”测试用例失败,returns 正确。
StringBuilder reverse
不生成新的 StringBuilder 实例。它会导致当前 StringBuilder 的底层字符被反转。所以,
String a = s.reverse().toString();
String b = s.toString();
第二个s.toString()
在反向操作StringBuilder
。
你必须做
String original = s.toString();
String reversed = s.reverse().toString();
return original.equals(reversed);
这是一个仅使用 2 个 StringBuilder 而不是 3 个并且不使用 built-in 反向方法的方法。相反,while 循环遍历链表,将当前节点附加到 original
StringBuilder,并将当前节点插入到 reversed
StringBuilder 的前面。所以 built-in 插入方法有助于反转节点值的顺序:
public boolean isPalindrome(ListNode head) {
StringBuilder original = new StringBuilder(), reversed = new StringBuilder();
ListNode curr = head;
while (curr != null) {
original.append(curr.val);
reversed.insert(0, curr.val);
curr = curr.next;
}
return original.toString().equals(reversed.toString()) ? true : false;
}