在一串单词中找到最短的单词
Find the shortest word, in a string of words
我又在做一些 Code-Wars 挑战,我对这个特别的挑战有疑问:
任务:“给定一串单词,return最短单词的长度。
字符串永远不会为空,您无需考虑不同的数据类型。"
我已经在 SO 上查找了可用的答案,并且我设法根据国外的想法自己创建了这个程序。
问题是它仍然没有产生所需的输出。
我 运行- 通过代码,我认为问题在于变量,以及我无法分配给正确的代码部分。(尽管我可能是错的)
下面,我附上代码和测试。
希望大家能找到问题的答案。
干杯
object Shortest{
def findShort(str:String):Int ={
var smallestLength = 99
var currentLength = 0
for(word <- str.split("")) {
currentLength = 0
for(letter <- word){
currentLength +=1
}
if(currentLength < smallestLength)
smallestLength = currentLength
}
smallestLength
}
}
测试如下:
测试结果:
最短测试
findShort(比特币接管世界也许谁知道也许)应该 return 3
测试失败
1 不等于 3
堆栈跟踪
在 45 毫秒内完成
findShort(事实证明随机测试用例比编写基本测试用例更容易)应该 return 3
测试失败
1 不等于 3
堆栈跟踪
1ms内完成
findShort(让我们谈谈 javascript 最好的语言) 应该 return 3
测试失败
1 不等于 3
堆栈跟踪
1ms内完成
findShort(我想有一天环游世界写代码)应该 return 1
findShort(让大家去一个很冷的地方度假) should return 2
测试失败
1 不等于 2
堆栈跟踪
1ms内完成
findShort(Steem Dogecoin 21inc Dash MadeSafeCoin) 应该 return 4
测试失败
1 不等于 4
堆栈跟踪
1ms内完成
findShort(Bitcoin Lisk) 应该 return 4
测试失败
1 不等于 4
堆栈跟踪
1ms内完成
findShort(ProofOfStake Ripple) 应该 return 6
测试失败
1 不等于 6
堆栈跟踪
findShort(ProofOfWork Dogecoin BTC Classic Dash Ripple ProofOfWork) 应该 return 3
测试失败
1 不等于 3
堆栈跟踪
1ms内完成
findShort(LiteCoin Bitcoin LiteCoin Bitcoin Waves Waves Bitcoin Dash Ripple Ripple Ethereum Classic Factom LiteCoin Factom Waves Factom) 应该 return 4
测试失败
1 不等于 4
堆栈跟踪
2ms内完成
findShort(Bitcoin Waves MadeSafeCoin DarkCoin ProofOfStake Classic BTC) 应该 return 3
测试失败
1 不等于 3
堆栈跟踪
1ms内完成
findShort(ProofOfStake Waves Ethereum Ethereum Ripple LiteCoin Steem Classic LiteCoin Ripple ProofOfStake Steem Monero Dogecoin Factom) 应该 return 5
测试失败
您的解决方案实际上是可以的,您需要更改的只是 str.split("")
到 str.split(" ")
(注意 space)。
这是一种依赖于built-in方法的方法:
def findShort(wordsString: String): Int = {
val wordsArray = wordsString.split(" ")
wordsArray.minBy(_.length).length
}
println(findShort("LiteCoin Bitcoin LiteCoin Bitcoin Waves Waves Bitcoin Dash Ripple Ripple Ethereum Classic Factom LiteCoin Factom Waves Factom"))
// Display 4
println(findShort("Bitcoin Waves MadeSafeCoin DarkCoin ProofOfStake Classic BTC"))
// Display 3
这里是使用 foldLeft
的版本,如果您不想依赖内置方法:
def length(word: String): Int =
word.foldLeft(0){case (acc, _) => acc + 1}
def findShort(str:String):Int = {
str.split(" ").foldLeft(99){ case (smallestLength, word) =>
val currentLength = length(word)
if(currentLength < smallestLength)
currentLength
else smallestLength
}
}
我又在做一些 Code-Wars 挑战,我对这个特别的挑战有疑问:
任务:“给定一串单词,return最短单词的长度。
字符串永远不会为空,您无需考虑不同的数据类型。"
我已经在 SO 上查找了可用的答案,并且我设法根据国外的想法自己创建了这个程序。
问题是它仍然没有产生所需的输出。
我 运行- 通过代码,我认为问题在于变量,以及我无法分配给正确的代码部分。(尽管我可能是错的)
下面,我附上代码和测试。
希望大家能找到问题的答案。
干杯
object Shortest{
def findShort(str:String):Int ={
var smallestLength = 99
var currentLength = 0
for(word <- str.split("")) {
currentLength = 0
for(letter <- word){
currentLength +=1
}
if(currentLength < smallestLength)
smallestLength = currentLength
}
smallestLength
}
}
测试如下:
测试结果:
最短测试 findShort(比特币接管世界也许谁知道也许)应该 return 3
测试失败 1 不等于 3 堆栈跟踪 在 45 毫秒内完成 findShort(事实证明随机测试用例比编写基本测试用例更容易)应该 return 3 测试失败
1 不等于 3 堆栈跟踪 1ms内完成 findShort(让我们谈谈 javascript 最好的语言) 应该 return 3 测试失败 1 不等于 3 堆栈跟踪 1ms内完成 findShort(我想有一天环游世界写代码)应该 return 1 findShort(让大家去一个很冷的地方度假) should return 2 测试失败
1 不等于 2 堆栈跟踪 1ms内完成 findShort(Steem Dogecoin 21inc Dash MadeSafeCoin) 应该 return 4 测试失败
1 不等于 4 堆栈跟踪 1ms内完成 findShort(Bitcoin Lisk) 应该 return 4 测试失败 1 不等于 4 堆栈跟踪 1ms内完成 findShort(ProofOfStake Ripple) 应该 return 6 测试失败
1 不等于 6 堆栈跟踪 findShort(ProofOfWork Dogecoin BTC Classic Dash Ripple ProofOfWork) 应该 return 3 测试失败
1 不等于 3 堆栈跟踪 1ms内完成 findShort(LiteCoin Bitcoin LiteCoin Bitcoin Waves Waves Bitcoin Dash Ripple Ripple Ethereum Classic Factom LiteCoin Factom Waves Factom) 应该 return 4 测试失败
1 不等于 4 堆栈跟踪 2ms内完成 findShort(Bitcoin Waves MadeSafeCoin DarkCoin ProofOfStake Classic BTC) 应该 return 3 测试失败
1 不等于 3 堆栈跟踪 1ms内完成 findShort(ProofOfStake Waves Ethereum Ethereum Ripple LiteCoin Steem Classic LiteCoin Ripple ProofOfStake Steem Monero Dogecoin Factom) 应该 return 5 测试失败
您的解决方案实际上是可以的,您需要更改的只是 str.split("")
到 str.split(" ")
(注意 space)。
这是一种依赖于built-in方法的方法:
def findShort(wordsString: String): Int = {
val wordsArray = wordsString.split(" ")
wordsArray.minBy(_.length).length
}
println(findShort("LiteCoin Bitcoin LiteCoin Bitcoin Waves Waves Bitcoin Dash Ripple Ripple Ethereum Classic Factom LiteCoin Factom Waves Factom"))
// Display 4
println(findShort("Bitcoin Waves MadeSafeCoin DarkCoin ProofOfStake Classic BTC"))
// Display 3
这里是使用 foldLeft
的版本,如果您不想依赖内置方法:
def length(word: String): Int =
word.foldLeft(0){case (acc, _) => acc + 1}
def findShort(str:String):Int = {
str.split(" ").foldLeft(99){ case (smallestLength, word) =>
val currentLength = length(word)
if(currentLength < smallestLength)
currentLength
else smallestLength
}
}