在不使用任何语言特定功能的情况下反转 Java 中的单词
Reverse words in Java without using any language specific functions
我一直在研究我公司提出的 Java 个面试问题,遇到一个我似乎无法找到解决方案的问题。
这里是问题:
Please write a method (function) accepting as single parameter a
string and reversing the order of the words in this string.
" "
是单词分隔符,任何其他 char
都被视为单词的一部分。为了简化,请考虑单词之间总是有一个space。
重要 - 你 不允许 使用其他字符串或数组或其他包含多个元素的数据结构 - 只是简单的原子变量,例如作为整数、字符等
此外,除了提供字符串长度的函数外,不允许使用任何其他语言特定的字符串函数。
预期结果:
"hello my beautiful world" -> "world beautiful my hello"
所以,我不能使用:chars[]
、str.split()
、str.charAt()
、str.substring()
、StringBuilder
,另一个String声明。
我应该使用递归吗?
因为String
是不可变的并且使用了封装,
您的问题没有解决方案。您无法直接更新值,没有可用的 setter 并且无法访问 getter(因为您只能使用 .length
),您无法读取该值。
所以,我建议回应说不可变性和封装性会阻止您这样做。
在现实生活中,作为一名软件工程师,您有时会被要求做一些技术上不可能甚至荒谬的事情。有时问的人会是重要的人,比如你的老板或大客户。
如果有人真的问你这个面试问题,那么你就属于其中一种情况。这让这个问题变得非常有趣,您可能想弄清楚真正的最佳回答方式是什么。
如果有人问我,我会这样回答,作为面试官,这样的回答我会给最多分:
1) 解释如何在技术上无法满足要求,但不要让我觉得自己很愚蠢。这显示外交。
2) 弄清楚我真正想要的是什么。在这种情况下,面试官可能想看看你是否知道如何使用低级操作反转字符串中的单词。例如,这是一个非常合理的 C 语言问题。弄清楚面试官真正想要的是经验和判断力。
3) 提供给我想要的答案。在 Java 中编写此方法,但采用 StringBuilder 而不是字符串,并且仅调用 length()、charAt() 和 setCharAt()。这显示了面试官希望看到的专业知识。
我一直在研究我公司提出的 Java 个面试问题,遇到一个我似乎无法找到解决方案的问题。
这里是问题:
Please write a method (function) accepting as single parameter a string and reversing the order of the words in this string.
" "
是单词分隔符,任何其他 char
都被视为单词的一部分。为了简化,请考虑单词之间总是有一个space。
重要 - 你 不允许 使用其他字符串或数组或其他包含多个元素的数据结构 - 只是简单的原子变量,例如作为整数、字符等
此外,除了提供字符串长度的函数外,不允许使用任何其他语言特定的字符串函数。
预期结果:
"hello my beautiful world" -> "world beautiful my hello"
所以,我不能使用:chars[]
、str.split()
、str.charAt()
、str.substring()
、StringBuilder
,另一个String声明。
我应该使用递归吗?
因为String
是不可变的并且使用了封装,
您的问题没有解决方案。您无法直接更新值,没有可用的 setter 并且无法访问 getter(因为您只能使用 .length
),您无法读取该值。
所以,我建议回应说不可变性和封装性会阻止您这样做。
在现实生活中,作为一名软件工程师,您有时会被要求做一些技术上不可能甚至荒谬的事情。有时问的人会是重要的人,比如你的老板或大客户。
如果有人真的问你这个面试问题,那么你就属于其中一种情况。这让这个问题变得非常有趣,您可能想弄清楚真正的最佳回答方式是什么。
如果有人问我,我会这样回答,作为面试官,这样的回答我会给最多分:
1) 解释如何在技术上无法满足要求,但不要让我觉得自己很愚蠢。这显示外交。
2) 弄清楚我真正想要的是什么。在这种情况下,面试官可能想看看你是否知道如何使用低级操作反转字符串中的单词。例如,这是一个非常合理的 C 语言问题。弄清楚面试官真正想要的是经验和判断力。
3) 提供给我想要的答案。在 Java 中编写此方法,但采用 StringBuilder 而不是字符串,并且仅调用 length()、charAt() 和 setCharAt()。这显示了面试官希望看到的专业知识。