首页
学习
活动
专区
圈层
工具
发布

几道 BAT 算法面试中经常问的「字符串」问题

这道题目是 初级程序员 在面试的时候经常遇到的一道算法题,而且面试官喜欢面试者手写! 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。...先假设是验证一个单词 level 是否是回文字符串,通过概念涉及到 正 与 反 ,那么很容易想到使用双指针,从字符的开头和结尾处开始遍历整个字符串,相同则继续向前寻找,不同则直接返回 false。...而这里与单独验证一个单词是否是回文字符串有所区别的是加入了 空格 与 非字母数字的字符,但实际上的做法一样的: 一开始先建立两个指针,left 和 right , 让它们分别从字符的开头和结尾处开始遍历整个字符串...如果遇到非字母数字的字符就跳过,继续往下找,直到找到下一个字母数字或者结束遍历,如果遇到大写字母,就将其转为小写。...对于这个题目,需要注意的要点有: 指针是否为空指针以及字符串是否为空字符串; 字符串对于正负号的处理; 输入值是否为合法值,即小于等于'9',大于等于'0'; int为32位,需要判断是否溢出; 使用错误标志

1.1K20
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    几道 BAT 算法面试中经常问的「字符串」问题

    这道题目是 初级程序员 在面试的时候经常遇到的一道算法题,而且面试官喜欢面试者手写! 题目描述 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。...先假设是验证一个单词 level 是否是回文字符串,通过概念涉及到 正 与 反 ,那么很容易想到使用双指针,从字符的开头和结尾处开始遍历整个字符串,相同则继续向前寻找,不同则直接返回 false。...而这里与单独验证一个单词是否是回文字符串有所区别的是加入了 空格 与 非字母数字的字符,但实际上的做法一样的: 一开始先建立两个指针,left 和 right , 让它们分别从字符的开头和结尾处开始遍历整个字符串...如果遇到非字母数字的字符就跳过,继续往下找,直到找到下一个字母数字或者结束遍历,如果遇到大写字母,就将其转为小写。...对于这个题目,需要注意的要点有: 指针是否为空指针以及字符串是否为空字符串; 字符串对于正负号的处理; 输入值是否为合法值,即小于等于'9',大于等于'0'; int为32位,需要判断是否溢出; 使用错误标志

    1.3K20

    C++ Primer Plus习题及答案-第十六章

    在易于使用方面,指出string对象至少两个优于C-风格字符串的地方。...回文指的是顺读和逆读都一样的字符串。例如,“tot”和“otto”都是简短的回文。编写一个程序,让用户输入字符串,并将字符串引用传递给一个bool函数。...请查看附录F中的字符串方法列表,以简化这项任务。 根据回文的定义我们很容易想到:将一个字符串翻转然后对比翻转后的字符串是否与原字符串相同,来判断该字符串是否为回文字符串。...该函数对数组进行排序,删除重复的值,返回缩减后数组中的元素数目。请使用STL函数编写该函数(如果决定使用通用的unique( )函数,请注意它将返回结果区间的结尾)。使用一个小程序测试该函数。...问题与编程练习4相同,但要编写一个模板函数: template int reduce(T ar[], int n); 在一个使用long实例和string实例的小程序中测试该函数

    1.4K20

    Java字符串面试问答

    我们可以使用intern()方法将字符串对象存储到字符串池中,或者如果池中已经存在具有特定值的String,则返回引用。 编写一种方法来检查输入的String是否为回文?...如果字符串的值在反转时相同,则称其为回文。例如,“aba” 是回文字符串。...如果要为字符串实现条件流,则可以使用if-else条件,如果使用的是Java 7或更高版本,则可以使用Switch用例。 编写程序以打印String的所有排列?...写一个函数找出给定字符串中最长的回文? 一个字符串中可以包含回文字符串,并且在给定的字符串中找到最长的回文是一个编程问题。...字符串在Java中是不可变的,并存储在字符串池中。一旦创建,它将一直保留在池中,直到收集到垃圾为止,因此即使我们使用密码完成操作,它也可以在内存中使用更长的时间,并且无法避免。

    1.7K50

    【详解】使用Java解决 - 判断一个5位数是否为回文数

    使用Java解决 - 判断一个5位数是否为回文数在编程中,回文数是一个正读和反读都相同的数字。例如,12321就是一个回文数,因为从左到右读和从右到左读都是12321。...本文将介绍如何使用Java编写一个程序来判断一个5位数是否为回文数。1. 理解问题首先,我们需要理解什么是5位数的回文数。...要判断这个数是否为回文数,我们只需要验证以下条件:个位与万位相同十位与千位相同2. 编写代码接下来,我们将编写一个Java程序来实现上述逻辑。...假设用户输入 ​​12345​​:请输入一个5位数: 1234512345 不是回文数。在Java中,判断一个5位数是否为回文数可以通过以下步骤实现:读取输入的5位数。...主方法: 创建一个​​Scanner​​对象来读取用户输入。提示用户输入一个5位数,并读取输入。检查输入的数是否为5位数。如果不是,输出错误信息并退出程序。

    18610

    【C语言题解】三题:回文检查、刘备 关羽 张飞三人过年放鞭炮、约瑟夫环问题(犹太人死亡游戏)(难度up,推荐)

    题目一:回文检查 ​ 根据题目要求,我们可以知道要输入一个完整的英文句子,其中包括空格 这里我们就要注意了,在scanf 中使用%s来输入字符串时,它会从第一个非空白字符开始读取,直到遇到空白字符就停止读取...// 函数:检查字符是否为字母 int is_alpha(char c) { return (c >= 'a' && c c >= 'A' && c 两个字符串(已处理,忽略空格和标点符号)是否为回文 // //方法二,字符数组首尾元素对比检查 int check2(char* str1, char* str2, int len)...return j; } // 函数:检查两个字符串(已处理,忽略空格和标点符号)是否为回文 // //方法二,字符数组首尾元素对比检查 int check2(char* str1, char...(忽略大小写) // 方法一 , 将逆置和原来的字符数组对比 // 反转处理后的句子并检查是否为回文 char temp[20]; int l = len - 1;

    46710

    C语言基础之【指针】(下)

    给定一个主字符串 p,其内容为 "11abcd111122abcd333abcd3322abcd3333322qqq" 要求编写一个 C 语言程序,统计子字符串 "abcd" 在主字符串中出现的次数 /...:%d\n", n); return 0; } 输出: 非空字符串元素个数:14 编写一个C语言程序,判断一个字符串是否是回文字符串。...strcmp() 函数会逐字符比较两个字符串,比较是基于字符的 ASCII 值进行的 比较结束的条件为直到遇到不同的字符或者到达字符串的结束符 '\0' 从两个字符串的第一个字符开始,依次比较对应位置的字符...如果对应位置的字符相同,则继续比较下一个字符,直到遇到不同的字符或者到达字符串末尾 如果在比较过程中遇到不同的字符,函数会根据这两个不同字符的 ASCII 值大小关系返回相应结果。...strncmp() 函数会它会逐字符比较这两个字符串,基于字符的 ASCII 值进行判断,直到出现以下情况之一: 比较完前 n 个字符 遇到其中一个字符串的结束符 '\0' 函数的原型: int strncmp

    42311

    用javascript分类刷leetcode20.字符串(图文视频讲解)2

    #退格之后的字符串是否相等,时间复杂度O(m+n),m、n是两个字符串的长度。...空间复杂度O(1)方法2.双指针思路:双指针从右往左循环,每次循环两个字符处理掉#,直到第一个字符是右边退格全部处理掉之后的字符,然后看这两个字符是否一致复杂度:时间复杂度O(m+n),m、n是两个字符串的长度...-1,遇到'('入栈,遇到')'出栈,并且判断栈长度,如果不为空,更新最大合法字符串长度,否则将当前下标放入栈中复杂度:时间复杂度O(n),n是字符串的长度,总共遍历1次。...验证回文字符串 Ⅱ (easy)给你一个字符串 s,最多 可以从中删除一个字符。请你判断 s 是否能成为回文字符串:如果能,返回 true ;否则,返回 false 。...s的子串,看是否满足s[i],s[j]相等,如果相等,则dp[i][j]是否为回文串取决于dp[i+1][j-1]是否也是回文子串,在循环的过程中不断更新最大回文子串的长度,注意子串的长度是0或1也算回文子串复杂度

    1.1K30

    菜鸟刷题Day2

    菜鸟刷题Day2 一.判定是否为字符重排:字符重排 描述 给定两个由小写字母组成的字符串 s1 和 s2,请编写一个程序,确定其中一个字符串的字符重新排列后,能否变成另一个字符串。...---- 解题思路: 这题思路与昨天最后两道类似,可以给定两个数组,将字符的内容加载到数组中,最后判断两个数组内容是否相同即可。...=arr2[i]) return false; } return true; } 二.回文排列:回文排列 描述 给定一个字符串,编写一个函数判定其是否为某个回文串的排列之一。...回文串是指正反两个方向都一样的单词或短语。排列是指字母的重新排列。 回文串不一定是字典当中的单词。...如果有超过一个字符只出现了一次或者奇数次,那么这个字符串一定无法组成回文串。

    57500

    C++ Primer Plus习题及答案-第六章

    第二个版本比第一个版本效率更高,因为在第一个中对于每个字符都需要判断两次,而在第二个版本中,如果字符为空格,在经过if判断确定为空格后,该字符肯定不是换行符,第二个else if的判断直接跳过,节省判断时间...在c++中,!!x是否与x相同呢? 对于bool变量而言,!!x与x是相同的,但对于其他类型变量不一定相同,例如!!5=1,!!5≠5。 6.创建一个条件表达式,其值为变量的绝对值。...='Q') { if(ch=='\n') line++; } 编程练习 1.编写一个程序,读取键盘输入,直到遇到@符号为止,并回显输入(数字除外),同时将大写字符转换为小写字符...这些信息被存储在一个动态分配的结构数组中.每个数据结构有两个成员:用来存储姓名的字符串数组(或string对象)和用来存储款项的double成员。...,它每次读取一个单词,直到用户只输入q。

    1.4K10

    【算法】双指针算法 ( 双指针算法分类 | 相向双指针 | 有效回文串 )

    文章目录 一、双指针算法分类 二、相向双指针示例 ( 有效回文串 ) 一、双指针算法分类 ---- 面试时经常遇到 限制算法复杂度为 O ( n ) 的情况 , 就需要使用以下算法 : 双指针算法...: 设置两个指针 ( 索引 ) , 进行不同方式的遍历 , 使用最高频的算法 ; 打擂台算法 : 设置一个擂主值 , 设置为无穷大或无穷小 , 通过遍历让该擂主值与遍历值打擂台 ; 求最大值最小值常用...; 单调栈算法 ; 单调队列算法 ; 双指针算法分类 : 相向双指针 : 判断一个字符串是否是回文串 , 从两边向中心遍历 ; 背向双指针 : 查找一个字符串的最长回文子串使用的 " 中心线枚举算法 "..., 这样会增加额外空间开销 ; 推荐使用双指针算法 , 一边进行过滤 , 一边进行对比 ; 设计两个指针 , 分别指向字符串的最左侧 和 最右侧 ; 每次遍历 , 都要进行 两个指针的下标判断 , 否则就会导致下标访问越界...isValid(s.charAt(left))) { left ++; } // 右指针向左移动, 一直移动, 直到遇到一个合法的字符

    3.6K10

    10条很棒的Python一行代码

    在下面,我想介绍并解释其中一些一行程序—可能有一些您还不知道,但对您的下一个Python项目很有用。...1.交换两个变量 # a = 1; b = 2 a, b = b, a # print(a,b) >> 2 1 让我们从一个经典的开始:通过简单地交换赋值位置来交换变量的值——在我看来,这是最直观的方法...在这里,您可以使用它将列表元素分配给给定的变量,这也称为解包。*将再次打包剩下的值,这将导致c的子列表。它甚至可以用于*的其他位置(例如列表的开始或中间部分)。...你可以将它读为[start: stop: step],所以[1::2]翻译为从索引1的元素开始(第二个元素),直到列表结束(第二个参数没有给出参数),并且总是采取两步。...10.回文检查 # phrase = 'deleveled' isPalindrome = phrase == phrase[::-1] # print(isPalindrome) >> true 回文是一系列向前和向后读取相同的字符

    86330

    算法:字符串

    具体步骤如下: 使用两个指针left, right, left指向字符串开始位置,right指向字符串结束位置 判断两个指针对应字符是否是字母或数字。...判断是否能成为回文字符串。 示例 : 输入: s = "aba" 输出: true 输入: s = "abca" 输出: true 解释: 你可以删除c字符。...输入: s = "abc" 输出: false 解题思路 首先考虑如果不允许删除字符,如何判断一个字符串是否是回文串。常见的做法是使用双指针。...定义左右指针,初始时分别指向字符串的第一个字符和最后一个字符,每次判断左右指针指向的字符是否相同,如果不相同,则不是回文串;如果相同,则将左右指针都往中间移动一位,直到左右指针相遇,则字符串是回文串。...每次判断两个指针指向的字符是否相同,如果相同,则更新指针,将 low 加 1,high 减 1,然后判断更新后的指针范围内的子串是否是回文字符串。

    3.6K30

    C语言从入门到实战——文件操作

    size 是每个数据项的大小(以字节为单位),count 是要读取的数据项的数量, stream 是一个指向要读取的文件的指针。...fgets函数会一直读取字符,直到遇到换行符(包括换行符在内)或达到指定的最大字符数。读取的字符串将存储在指定的字符数组中,并在结束时自动添加一个空字符。...7.1 被错误使用的 feof 牢记:在文件读取过程中,不能用feof函数的返回值直接来判断文件的是否结束。 feof 的作用是:当文件读取结束的时候,判断是读取结束的原因是否是:遇到文件尾结束。...文本文件读取是否结束,判断返回值是否为 EOF ( fgetc ),或者 NULL ( fgets ) 例如: fgetc 判断是否为 EOF . fgets 判断返回值是否为 NULL ....二进制文件的读取结束判断,判断返回值是否小于实际要读的个数。 例如: fread判断返回值是否小于实际要读的个数。

    1.4K10

    搞定大厂算法面试之leetcode精讲20.字符串

    [i],s[j]相等,如果相等,则dp[i][j]是否为回文串取决于dp[i+1][j-1]是否也是回文子串,在循环的过程中不断更新最大回文子串的长度,注意子串的长度是0或1也算回文子串 复杂度:时间复杂度...,准备一个栈,存放字符串下标,首先放入初始参照物-1,遇到'('入栈,遇到')'出栈,并且判断栈长度,如果不为空,更新最大合法字符串长度,否则将当前下标放入栈中 复杂度:时间复杂度O(n),n是字符串的长度...旋转字符串 (easy) 思路:字符串重复一次 判断是否包含另一个字符串 复杂度:时间复杂度O(n^2),比较一个字符串是否包含另一个字符串的复杂度O(n^2)。...比较含退格的字符串 (easy) ds_184 方法1.截取字符串,循环字符串,遇到#就截掉最后一个字符,循环完毕之后,最后比较两个去除掉#退格之后的字符串是否相等,时间复杂度O(m+n),m、n是两个字符串的长度...空间复杂度O(1) 方法2.双指针 思路:双指针从右往左循环,每次循环两个字符处理掉#,直到第一个字符是右边退格全部处理掉之后的字符,然后看这两个字符是否一致 复杂度:时间复杂度O(m+n),m、n是两个字符串的长度

    99440

    JAVA算法:回文字符串相关问题详解(回文字符串总结)

    编写一个工具方法判断给定的字符串是否为回文字符串 例如:给定一个字符串“aabbaa”,判断该字符串是否为回文字符串。...算法设计如下: /* * 给定一个字符串,判断该字符串是否为一个回文字符串 * start表示需要判断的起始位置 * end表示需要判断的结束位置 */ public static...; public class PalindromicUtils { /* * 给定一个字符串,判断该字符串是否为一个回文字符串 * start表示需要判断的起始位置 * end表示需要判断的结束位置...回文的含义是:子串从左向右看和从右向左看是相同的,例如:abba,yyxyy。 在判断时忽略所有标点符号和空格,且忽略大小写,但是输出应保持原样。 输入字符串的长度不超过5000,且占据单独一行。...1) 是一个回文字符串时 dp(i, j) 的取值为 true * 当我们找到一个回文子字符串时,我们检查其是否为最长的回文字符串 */ public static String longestPalindrome

    1.3K10

    验证回文串

    原题样例:验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 **说明:**本题中,我们将空字符串定义为有效的回文串。...这样我们只需要判断 sgood 是否是一个普通的回文串即可。 判断的方法有两种。...第一种是使用语言中的字符串翻转 API 得到 sgood 的逆序字符串 sgood_rev,只要这两个字符串相同,那么 sgood 就是回文串。...Java 方法二:在原字符串上直接双指针判断 思路解析 直接在原字符串 s 上使用双指针。 在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。...也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。

    78241

    【C++】 —— 笔试刷题day_19

    一、小易的升级之路 题目解析 小易现在要打游戏,现在游戏角色的初始能力值为a,我们会遇到n个怪,这些怪物的防御值为b1、b2、b3......,让第1个字符到第n个字符,每一个字符取出一个字符,这样组成一个新的字符串,让我们判断这个新的字符串是否可能是一个回文字符串;如果也可能输出Yes,否则就输出No。...算法思路 这道题初看可能有一点思路,但不多; 对于n个字符串,每一个字符串取一个字符组成的新字符串,能否构成回文字符串;(对于回文字符串,我们知道,第1哥和第n个、第2个和第n-1个…这些字符都是相同的...思路:双指针 + 判断两个字符串是否存在相同的字符。 那么现在问题就变成了:如何判断两个字符串存在相同的字符? 那判断两个字符串中是否存在相同的字符,方法就很简单了:使用hash表计数。...首先遍历第一个字符串,将所有出现的字符放到hash表中,让遍历第二个字符串判断是否存在相同的字符即可。

    25000

    验证回文串

    算法题 原题样例:验证回文串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 **说明:**本题中,我们将空字符串定义为有效的回文串。...这样我们只需要判断 sgood 是否是一个普通的回文串即可。 判断的方法有两种。...第一种是使用语言中的字符串翻转 API 得到 sgood 的逆序字符串 sgood_rev,只要这两个字符串相同,那么 sgood 就是回文串。...Java 方法二:在原字符串上直接双指针判断 思路解析 直接在原字符串 s 上使用双指针。 在移动任意一个指针时,需要不断地向另一指针的方向移动,直到遇到一个字母或数字字符,或者两指针重合为止。...也就是说,我们每次将指针移到下一个字母字符或数字字符,再判断这两个指针指向的字符是否相同。

    56070
    领券