我一直在查看我公司提出的Java面试问题,并遇到了一个我似乎无法找到解决方案的问题。
以下是问题:
请写一个接受单个参数a的方法(函数) 字符串并反转此字符串中单词的顺序。
" "
是单词分隔符,任何其他char
都被视为单词的一部分。为了简化,请考虑在单词之间总是有一个空格。
重要 - 您 NOT 允许使用其他字符串或数组或包含多个元素的其他数据结构 - 只是普通的原子变量,如整数,字符等。
此外,除了给出字符串长度的函数外,不允许使用任何其他语言特定的字符串函数。
预期结果:
"hello my beautiful world" -> "world beautiful my hello"
所以,我不能使用:chars[]
,str.split()
,str.charAt()
,str.substring()
,StringBuilder
,另一个String声明。
我应该使用递归吗?
答案 0 :(得分:15)
因为String
是不可变的并且使用封装,
您的问题无法解决。您无法直接更新值,没有可用的setter且无法访问getter(因为您只能使用.length
),因此无法读取值。
所以,我建议回应一下,Immutability和封装阻止你这样做。
答案 1 :(得分:8)
在现实生活中,作为软件工程师,有时会要求您做一些技术上不可能甚至是荒谬的事情。有时,询问的人会像你的老板或大客户那样重要。
如果有人实际问你这个面试问题,那么你就是其中一种情况。这使得这个问题非常有趣,你可能想知道最好的方法是什么。
如果有人问我,这就是我要回答的问题,作为一名采访者,我会给出最多的答案:
1)解释在技术上如何不可能满足要求,但这样做却不会让我觉得愚蠢。这显示了外交。
2)找出我真正想要的东西。在这种情况下,访调员可能想知道您是否知道如何使用低级操作来反转字符串中的单词。例如,这是一个非常合理的C语言问题。弄清楚面试官真正想要的是表现出经验和判断力。
3)提供给我想要的答案。在Java中编写此方法,但是使用StringBuilder而不是字符串,并且只调用length(),charAt()和setCharAt()。这显示了面试官希望看到的专业知识。