字符串与SQL-第8天

LeetCode

  • 题目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;
	 }
}

nowcoder

  • 题目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)

你可能感兴趣的:(每日一练,sql,java)