zoukankan      html  css  js  c++  java
  • 验证回文串的一点解题思路

    回文串,就是说给出的字符串中的字符是否对称,即:第一个字符与最后一个字符相等,第二个字符等于倒数第二个字符,以此类推,忽略大小写以及标点符号。

    e.g:

    A man, a plan, a canal: Panama =====>>>>输出应为true

    race a car ======>>>>输出应为false

    这道题,在看清楚题目要求之后,其实就可以有解题的思路了。忽略大小写,那直接把字符串全都转换为小写就可以了(大写也可以啦只要喜欢就好),这样在后面的判断语句中就可以写的比较
    单。
    另外,我个人是比较偏爱数组的,对字符串比较不感冒,所以我在这里就用一个char数组来存储这个字符串并进行操作。比如说剔除一些空格或者标点符号等一些奇奇怪怪的东西。

    (貌似用string的split()方法也可以??菜鸡一个,并不是很清楚)在剔除这些东西之后就可以用一个for循环来遍历这个char数组并且对其中的元素
    进行比较了。
    代码如下:
    class Solution {
        public boolean isPalindrome(String s) {
            int length = s.length();
            String s1 = s.toLowerCase();
            char[] ch = s1.toCharArray();
    //题目所说,空的字符串当成一个有效的回文串
    if(s.isEmpty()) { return true; }
    //如果长度只有1的话,无论如何它的逆序都等于它本身
    if(length == 1) { return true; } int count = 0; //用于记录符合条件的字符数目 int index = 0; for(char c:ch) { if((c>='a'&&c<='z')||(c>='0'&&c<='9')) { count++; } }
    //如果全部是一些奇奇怪怪的东西,虽然看起来极度奇怪,但题目说它是有效的回文串我也没有办法啊摊手
    if(count == 0) { return true; } else { char[] ch1 = new char[count]; for(char c:ch) { if((c>='a'&&c<='z')||(c>='0'&&c<='9')) { ch1[index] = c; index++; } }
    /**
    *在这里其实可以创建两个字符串,然后把操作过后的char数组以及char数组的逆序赋值给这两个字符串,如果两个字符串相等的话则证明给出的字符串是回文串。
    *不过我感觉这个方法其实更次,时间并不会减少,而且内存还增加了
    **/
    for(int i=0,j=count-1; i<=j; i++,j--) { if(ch1[i]!=ch1[j]) { return false; } } } return true; } }

    这段代码运行的时间和占用的内存好像并不稳定,试过提交几次得到的结果都并不相同。在最后的循环判断那里,虽然我只是觉得注释所说的方法所需要的时间更长,但毕竟没有真正运行比较过,所以说不定,有机会的话要试一下效果(说说罢了,并不会试)

  • 相关阅读:
    C# 从类库中获取资源图片,把图片资源保存到类库中
    C# Bitmap/png转成jpg格式,压缩图片
    C# 窗体间传值(使用委托与自定义事件)
    C# Image与Base64编码互转函数
    简单Tomcat HTTP RPC框架
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    Java序列化机制和原理
    攻破JAVA NIO技术壁垒
    代理模式(Proxy)
    Java序列化与反序列化
  • 原文地址:https://www.cnblogs.com/WakingShaw/p/11144599.html
Copyright © 2011-2022 走看看