- 题目1: 实现strStr()函数
给你两个字符串 haystack 和 needle ,请你在 haystack 字符串中找出 needle 字符串出现的第一个位置(下标从 0 开始)。如果不存在,则返回 -1 。当 needle 是空字符串时,我们应当返回什么值呢?这是一个在面试中很好的问题。对于本题而言,当 needle 是空字符串时我们应当返回 0 。
- 解题思路
①当needle为空串时返回0,当haystack为空时返回-1
②遍历haystack并且遍历到haystack.length()-needle.length()为止,因为haystack遍历剩余的长度小于needle的长度时needle不可能在haystack里面存在。
③当haystack的第i个位置与needle的第一个位置相等时,从haystack的第i个位置开始与needle挨个比较(循环实现),当相对应的两个位置相等,则把i的值(开始位置)记录下来,否则更新开始位置为-1,结束内层循环。
④开始位置为-1时跳过本次外层循环,否则结束外层循环,因为此时已经找到needle在haystack里面的开始位置了。
【知识点】
①获取字符串在index位置的字符:String.charAt(int index)
②结束整个(一个)循环:break
③结束本次(一个)循环:continue
- 代码
public class LeetCodeString { public static void main(String[] args) { String haystack="hello", needle="ll"; System.out.println(strStr(haystack, needle)); } public static int strStr(String haystack, String needle) { if (needle.length() == 0) return 0; if(haystack.length()==0) { return -1; } int fIndex = -1; int hLen=haystack.length(); int nLen=needle.length(); for(int i=0;i<=hLen-nLen;i++) { if(haystack.charAt(i)==needle.charAt(0)) { for(int j=0;j
- 题目2:最后一个单词的长度
给你一个字符串 s,由若干单词组成,单词前后用一些空格字符隔开。返回字符串中 最后一个 单词的长度。单词 是指仅由字母组成、不包含任何空格字符的最大子字符串。
- 解题思路
①去掉原始字符串前后的空格
②按空格拆分成字符串数组
③获取最后一个元素,获取其长度
【知识点】
①去掉字符串前后的空格:String.trim()
②拆分字符串:String.split(String str)
- 代码
public class LeetCodeString { public static void main(String[] args) { String s = " fly me to the moon "; System.out.println(lengthOfLastWord(s)); } public static int lengthOfLastWord(String s) { int index=-1; String[] strings=s.trim().split(" "); index=strings[strings.length-1].length(); return index; } }
- 题目1:将employees表中的所有员工的last_name和first_name通过引号连接起来
drop table if exists `employees` ; CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`)); INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26'); INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21'); INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'); INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01'); INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12'); INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02'); INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10'); INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15'); INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18'); INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24'); INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');
输出格式如下:
Facello'Georgi Simmel'Bezalel
- 解题思路
【知识点】
①sql数据连接
select concat(<字符串/字符串变量1>,<字符串/字符串变量2>,...) from <表名>
- 代码
select concat(last_name,'\'',first_name) from employees
- 题目2:查找字符串中逗号出现的次数
现有strings表如下:
drop table if exists strings; CREATE TABLE strings( id int(5) NOT NULL PRIMARY KEY, string varchar(45) NOT NULL ); insert into strings values (1, '10,A,B'), (2, 'A,B,C,D'), (3, 'A,11,B,C,D,E');
请你统计每个字符串中逗号出现的次数cnt。以上例子的输出结果如下:
1|2 2|3 3|5
- 解题思路
字符串原始长度减去从字符串移除某个字符之后的长度
【知识点】
①求字符串长度函数 length(<字符串/字符串变量>)
select length(<字符串/字符串变量>) from <表名>
②替换字符函数 replace(<字符串/字符串变量>,<被替换的字符串>,<替换的字符串>)
select replace(<字符串/字符串变量>,<被替换的字符串>,<替换的字符串>) from <表名>
- 代码
select id,length(string)-length(replace(string,',','')) cnt from strings
- 题目3:获取employees中的first_name并按照first_name最后两个字母升序进行输出
现有strings表如下:
drop table if exists `employees` ; CREATE TABLE `employees` ( `emp_no` int(11) NOT NULL, `birth_date` date NOT NULL, `first_name` varchar(14) NOT NULL, `last_name` varchar(16) NOT NULL, `gender` char(1) NOT NULL, `hire_date` date NOT NULL, PRIMARY KEY (`emp_no`)); INSERT INTO employees VALUES(10001,'1953-09-02','Georgi','Facello','M','1986-06-26'); INSERT INTO employees VALUES(10002,'1964-06-02','Bezalel','Simmel','F','1985-11-21'); INSERT INTO employees VALUES(10003,'1959-12-03','Parto','Bamford','M','1986-08-28'); INSERT INTO employees VALUES(10004,'1954-05-01','Chirstian','Koblick','M','1986-12-01'); INSERT INTO employees VALUES(10005,'1955-01-21','Kyoichi','Maliniak','M','1989-09-12'); INSERT INTO employees VALUES(10006,'1953-04-20','Anneke','Preusig','F','1989-06-02'); INSERT INTO employees VALUES(10007,'1957-05-23','Tzvetan','Zielinski','F','1989-02-10'); INSERT INTO employees VALUES(10008,'1958-02-19','Saniya','Kalloufi','M','1994-09-15'); INSERT INTO employees VALUES(10009,'1952-04-19','Sumant','Peac','F','1985-02-18'); INSERT INTO employees VALUES(10010,'1963-06-01','Duangkaew','Piveteau','F','1989-08-24'); INSERT INTO employees VALUES(10011,'1953-11-07','Mary','Sluis','F','1990-01-22');
输出结果如下:
Chirstian Tzvetan Bezalel Duangkaew
- 解题思路
获取first_name后两个字符并按照两个字符升序排序
【知识点】
①获取子串 SUBSTR(<字符串/字符串变量>,<开始位置>,<获取长度>)
select SUBSTR(<字符串/字符串变量>,<开始位置>,<获取长度>) from <表名>
②排序 order by <字段名> [desc/asc]
select * from <表名> order by <字段名> [desc/asc]
- 代码
select first_name from employees order by SUBSTR(first_name,-2,2)