如果在将所有大写字母转换为小写字母并删除所有非字母数字字符后,短语是一个回文,则它读取相同的前后向。字母数字字符包括字母和数字。
给定字符串s,如果是回文,则返回true,否则返回false。
示例1:
输入:S=“一个人,一个计划,一个运河:巴拿马”输出:真正的解释:"amanaplanacanalpanama“是一个回文。示例2:
输入:s=“赛车”输出:错误解释:"raceacar“不是回文。
myCode
class Solution {
fun isPalindrome(s:String):Boolean {
var s1 = s.toLowerCase()
var myStringBuilder = StringBuilder()
var n = s1.length-1
var n1=myStringBuilder.length
for ( i in 0..n) {
if (Character.isLetterOrDigit(s1[i])) {
myStringBuilder.append(s1[i])
}
}
for( i in 0 .. (n1/2)-1){
if(myStringBuilder[i] != myStringBuilder[n1-i-1]){
return false
}
}
return true
}
}第一个情况已通过,但这不是按照结果输入传递的:s=“竞赛--预期为true的汽车结果为false
发布于 2022-08-13 16:30:46
您可以使用这个简单的解决方案。
fun isPalindrome(s:String):Boolean {
val str = s.filter { it.isLetterOrDigit() }.lowercase()
for (i in 0..str.length/2 ){
if (str[i]!=str[str.length-i-1])
return false
}
return true
}编辑:通过@cactustictacs注释,您可以以更简单的方式完成这一任务。
fun isPalindrome(s:String):Boolean {
val str = s.filter { it.isLetterOrDigit() }.lowercase()
return str == str.reversed()
}发布于 2022-08-13 17:09:31
您初始化n1太早了:
// create an -empty- StringBuilder
var myStringBuilder = StringBuilder()
...
// since it's empty, n1 == 0
var n1=myStringBuilder.length在实际放置任何内容之前,将其设置为StringBuilder内容的长度。这是您正在设置的一个简单值,它不是对访问当前值的length getter的引用。你设定了一次,这就是它的价值永远。
因此,您的最后一个循环,即检查它是否为回文的循环,从未实际运行:
// since n1 is 0, this is for (i in 0..0)
for( i in 0 .. (n1/2)-1){在将内容添加到n1之后,您可以通过初始化StringBuilder来修复它,这样您就可以获得它的最终长度:
for ( i in 0..n) {
if (Character.isLetterOrDigit(s1[i])) {
myStringBuilder.append(s1[i])
}
}
// StringBuilder is complete, grab its final length
var n1 = myStringBuilder.length
// now you can use it
for (i in 0..(n1/2)-1) {只有fyi,还有一个until操作符,它的工作方式类似于..,只是它不包括范围的最后一个值。所以你可以写
for (i in 0 until (n1/2))
如果你愿意的话!
https://stackoverflow.com/questions/73345773
复制相似问题