【发布时间】:2020-04-14 06:24:39
【问题描述】:
我正在尝试做编码练习
给定一个字符串str,返回true字符串遵循模式anbn,即它有a后跟b,这样a和b的数量相同。
输入:str = "aabb" 输出:是的
输入:str = "abab" 输出:否
输入:str = "aabbb" 输出:否
我已经完成了以下代码
public static boolean isAnBn(String s)
{
int l = s.length();
// Only even length strings will have same number of a's and b's
if (l%2 == 1)
{
return false;
}
// Set two pointers, one from the left and another from right
int i = 0;
int j = l-1;
// Compare the characters till the center
while (i<j)
{
if(s.charAt(i) != 'a' || s.charAt(j) != 'b')
{
return false;
}
i++;
j--;
}
return true;
}
还有其他方法可以使用 Java 8 重构代码
任何帮助将不胜感激
【问题讨论】:
-
“还有另一种我们可以使用 Java 8 重构代码的方法吗?” - 很多。但是你为什么要这样做呢?你的目标是什么?
-
我是 java 8 新手,需要在 java 8 中完成一些编码挑战
-
您的代码是在 Java 8 中。不,它没有使用流或 Java 8 附带的任何其他简洁功能,但它仍然是完美的 Java 8。
-
按字面意思理解“anbn”:
if(s.length()%2 == 1) return false; int n = s.length() / 2; return s.matches("a{"+n+"}b{"+n+'}'); -
我假设这个练习的重点是结合一些理论 CS 概念,更具体地说是自动机理论和形式语言理论。尽管已经提供了更实用的解决方案,但 CS 101 的方法是编写一个下推自动机。对于每个字符,如果遇到“a”,将其压入堆栈。如果遇到'b',则从堆栈中弹出。在字符串的末尾,如果您的堆栈为空,则您接受。