首页 > 其他分享 >题海拾贝:LCR018.验证回文串

题海拾贝:LCR018.验证回文串

时间:2024-12-16 09:57:48浏览次数:5  
标签:ch LCR018 string -- 拾贝 return it2 题海 it1

           Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!

91bfeb2bb1414a2ebf09cbc4f9706779.gif

我的博客:<但凡.

我的专栏:《编程之路》《数据结构与算法之美》《题海拾贝》

欢迎点赞,关注!

1、题目

2、0961aec550924fa4a94a9e12b4a30d0e.png

2、题解 

        这个题如果没有空格和符号的话,那就直接双指针了,或者拿个C++里面的reverse反转一下。但问题是它有空格和各种符号,那就得考虑考虑了。

        第一种思路,我们先把所有的符号去掉,存到一个新的字符串里,然后对那个字符串进行判断。双指针啊迭代器啊,甚至你拿C风格的字符数组做都行。

        第二种思路,我们检测到空格和符号时就跳过,然后我们在继续判断。

第一种(c++实现):

class Solution {
public:
    bool isPalindrome(string s) {
    int i = 0;
    string h;
    for (char ch : s)
    {
        if (isalnum(ch))
        {
            h.push_back(tolower(ch));
        }
    }
    string::iterator it1 = h.begin();
    string::iterator it2 = h.end();
    it2--;
    while (it2 - it1 >= 0)
    {
        
        if (*it1 != *it2)
        {
            return false;
        }
        it1++;
        it2--;
    }
    return true;
}
};

 第二种(c++实现):

#include<algorithm>
class Solution {
public:
    bool isPalindrome(string s) {
  
        string h;
        for(char ch:s)
        {
            if(isalnum(ch))
            {
                h.push_back(tolower(ch));
            }
        }
       int i=0;
       int j=h.size();
       if(i==j)
       {
        return true;
       }
        while(j-i>=0)
        {
            if(h[i]!=h[j-1])
            {
                return false;
            }
            i++;
            j--; 
        }
        return true;
    }
};

        以上这两种都是第一种思路。但是千万别忘了转换成小写字母。

        但是既然都用c++了,以上两种方法就有点鸡肋了,不如直接reverse。

第三种(c++reverse):


class Solution {
    #include<algorithm>
public:
   bool isPalindrome(string s) {
    int i = 0;
    string h;
    for (char ch : s)
    {
        if (isalnum(ch))
        {
            h.push_back(tolower(ch));
        }
    }
    string v = h;//记录反转之前的
    reverse(h.begin(), h.end());
    if (h==v)
        return true;
    else
        return false;
}
};

第四种(思路二):

        这种方法略优一些。

class Solution {
public:
    bool isPalindrome(string s) {
     int i = 0;
     string::iterator it1 = s.begin();
     string::iterator it2 = s.end();//指向字符串最后一个字符的下一个位置
     it2--;//让it2指向最后一个字母
     while (it2 - it1 >= 0)
     {
         while (isalnum(*it1) == 0&&it1!=it2)//&&后面的一定要有,不然连着三个空格直接栈溢出你就老实了。
         {
             it1++;
         }
         while (isalnum(*it2) == 0&&it1!=it2)
         {
             it2--;
         }
         *it1=tolower(*it1);//这个函数有返回值得接受,不然就是没改
         *it2=tolower(*it2);
         if (*it1 != *it2)
         {
             return false;
         }
        
         it1++;
         it2--;
     }
     return true;
 }
};

        好了,今天的内容就分享到这,我们下期再见!

 

标签:ch,LCR018,string,--,拾贝,return,it2,题海,it1
From: https://blog.csdn.net/2401_87995839/article/details/144475379

相关文章

  • 题海拾贝——救济金发放(The Dole Queue, UVa 133)
            Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!我的博客:<但凡.我的专栏:《题海拾贝》、《编程之路》欢迎点赞,关注!目录1、题目2、分析3、题解(附详细解析)4、拓展 1、题目        n(n个人站成一圈,逆时针编号为1~n。......
  • 题海拾贝——生成元(Digit Generator,ACM/ICPC SEOUL 2005,UVa1583)
            Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!我的博客:<但凡.欢迎点赞关注!1、题目描述        如果x加上x的各个数字之和得到y,就说x是y的生成元。给出(1<=n<=100000),求最小生成元。无解输出0。2、思路分析    ......
  • 小学心理健康教育主题海报设计分享
    主题设计:为了倡导小学生重视心理健康教育,本次设计以“打开心窗,享受健康”为主题,旨在通过直观的视觉元素传达心理健康的重要性。设计思路:色彩选择:主体背景采用温暖的樱花粉色调,字体颜色选择象牙白色调,象征着纯净与和谐,同时易于引起小学生的注意。形状与布局:海报的左上角及右下......
  • 62.html+css网页设计实例/“动漫”主题海贼王介绍/web前端期末大作业/
    一、前言  本实例以“动漫”海贼王为主题设计,div+css布局,页面代码简单,质量好,是个不错的学生网页设计作业源码。【关注作者|获取更多源码(2000+个Web案例源码)|优质文章】;您的支持是我创作的动力!【点赞收藏博文】,Web开发、课程设计、毕业设计有兴趣的联系我交流分享,3Q!二、......
  • Java拾贝第十九天——注解
    Annotation注解(Annotation)是一种可以作用于类、属性或方法的,带有特定功能的,特殊的"注释"。且注解不影响程序的运行:不论是否使用注解,代码都可以正常执行。Annotation接口定义如下publicinterfaceAnnotation{ booleanequals(Objectobj); inthashCode(); StringtoSt......
  • Java拾贝第十七天——反射之认识反射相关类
    反射相关类在Java.lang.reflect包下有类:Constructor:代表一个类中的构造方法Field:代表一个类中的属性。Method:代表一个类中的方法。反射更加的体现Java一切皆对象这个概念至此,Class类的常用方法如下:方法类型描述publicConstructor<?>[]getConstructors()throws......
  • Java拾贝第十七天——反射之初认Class类
    反射反射可以在运行中知晓任意类的任意属性和方法。这种动态获取信息的功能称之为反射。小栗子packagemoudle2;publicclassTest17{publicstaticvoidmain(String[]args){Test17t17=newTest17();System.out.println(t17.getClass());......
  • Java拾贝第十六天——其他集合类Properties
    PropertiesProperties是Map的子实现类,其定义如下publicclassPropertiesextendsHashtable<Object,Object>Hashtable是Map接口的一个子类,与Vector一样都是旧的操作类,与HashMap没什么区别。Properties是操作属性文件的一个属性操作类。属性文件中属性都是以字符串表示的键......
  • Java拾贝第十六天——集合之Queue、Stack
    Queue(队列)Queue是一种先进先出(FIFO:FirstInFirstOut)的有序集合:Queue是Collection的子接口,其定义如下publicinterfaceQueue<E>extendsCollection<E>LinkedList实现了Queue的子接口,根据多态性可以使用Queue创建LinkedList实例。Queue接口常用方法如下:方法类型......
  • Java拾贝第十五天——集合之Map
    从上图中可以发现,Map接口与Collection接口是不同的。Map接口中的每个元素都使用"键值对"的形式存储在集合中。(key→value)其接口定义如下:publicinterfaceMap<K,V>K泛型代表的是key,V泛型代表的是value。在使用Map时必须指定两个具体的类型。Map常见的实现子类:HashMap,TreeM......