leetcode-字符串篇
Implement strStr()
/**
* Implement strStr().
*
* Return the index of the first occurrence of needle in haystack, or -1 if
* needle is not part of haystack.
*
* 实现Java的indxOf
*/
public class Lc28 {
/**
* 正常的逻辑比较,尽量不使用原来的api
*
* @param haystack
* @param needle
* @return
*/
public static int strStr(String haystack, String needle) {
boolean haystackIsNUll = "".equals(haystack);
boolean needleIsNUll = "".equals(needle);
if (!haystackIsNUll && !needleIsNUll) {
} else if (!needleIsNUll) {
return -1;
} else {
return 0;
}
char chHaystack[] = haystack.toCharArray();
char chNeedle[] = needle.toCharArray();
int count = chNeedle.length;
int temp = 0;
for (int i = 0; i < chHaystack.length; i++) {
if (chHaystack[i] == chNeedle[0]) {
temp = i;
for (int j = 0; j < chNeedle.length && temp < chHaystack.length; j++, temp++) {
if (chHaystack[temp] == chNeedle[j]) {
count--;
} else {
break;
}
}
}
if (count == 0) {
return i;
} else {
count = chNeedle.length;
}
}
return -1;
}
/**
* 以被比较的字符串作为固定步长,每次直接比较对应长度字符串,比较的次数为俩个字符串的差值。
* @param haystack
* @param needle
* @return
*/
public static int strStr2(String haystack, String needle) {
boolean haystackIsNUll = "".equals(haystack);
boolean needleIsNUll = "".equals(needle);
if (!haystackIsNUll && !needleIsNUll) {
} else if (!needleIsNUll) {
return -1;
} else {
return 0;
}
char chHaystack[] = haystack.toCharArray();
char chNeedle[] = needle.toCharArray();
int len = chHaystack.length - chNeedle.length;
for (int i = 0; i <= len; i++) {
if (haystack.substring(i, chNeedle.length + i).equals(needle)) {
return i;
}
}
return -1;
}
public static void main(String[] args) {
String haystack = "bbaa";
String needle = "aab";
// System.out.println(strStr(haystack, needle));
System.out.println(strStr2(haystack, needle));
}
}
Longest Common Prefix
/**
* Write a function to find the longest common prefix string amongst an array of
* strings.
*
* If there is no common prefix, return an empty string "".
*
*找出所有字符串共有的前缀字符出啊
*/
public class Lc14 {
public static String longestCommonPrefix(String[] strs) {
if (strs.length == 0) {
return "";
}
//优化 找到最小长度字符串作为前缀与其他单词比较
String prefix = strs[0];
for (int i = 0; i < strs.length; i++) {
if (prefix.length() > strs[i].length()) {
prefix = strs[i];
}
}
//比较前缀和其他单词
for (int i = 0; i < strs.length; i++) {
while (strs[i].indexOf(prefix) != 0) {
prefix = prefix.substring(0, prefix.length() - 1);
if (prefix.isEmpty()) {
return "";
}
}
}
return prefix;
}
public static void main(String[] args) {
String[] strs = { "flower", "flow", "flight" };
System.out.println(longestCommonPrefix(strs));
}
}
Length of Last Word
/**
* Given a string s consists of upper/lower-case alphabets and empty space
* characters ' ', return the length of last word in the string.
*
* If the last word does not exist, return 0.
*
* Note: A word is defined as a character sequence consists of non-space
* characters only.
*
*/
public class Lc58 {
/*
* 常规思路:遍历字符串,找到连续的字符个数
*/
public static int lengthOfLastWord(String s) {
if (s.length() == 0 || " ".equals(s)) {
return 0;
}
char[] chs = s.trim().toCharArray();
int len = 0;
for (int i = 0; i < chs.length; i++) {
if ((chs[i] >= 'a' && chs[i] <= 'z') || (chs[i] >= 'A' && chs[i] <= 'Z')) {
len++;
} else if (chs[i] == ' '&&i==chs.length-1) {
if (len > 0) {
return len;
}
}else if(chs[i] == ' '){
len = 0;
}
}
return len;
}
//利用api直接计算
public static int lengthOfLastWord1(String s) {
return s.trim().length() - s.trim().lastIndexOf(" ") - 1;
}
public static void main(String[] args) {
String str = "Today is a nice day";
// System.out.println(lengthOfLastWord(str));
System.out.println(lengthOfLastWord1(str));
}
}
First Unique Character in a String
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Given a string, find the first non-repeating character in it and return it's
* index. If it doesn't exist, return -1.
*/
public class Lc387 {
/**
* 通过map存储各个字符出现爱你的个数
* 注意用linkHashMap,hashmap会自动排序
* @param s
* @return
*/
public static int firstUniqChar(String s) {
if ("".equals(s)) {
return -1;
}
char[] chs = s.toCharArray();
Map<Character, Integer> map = new LinkedHashMap<Character, Integer>();
for (int i = 0; i < chs.length; i++) {
Character key = chs[i];
if (map.containsKey(key)) {
Integer count = map.get(key);
map.put(key, ++count);
} else {
map.put(key, 1);
}
}
Character firstC = ' ';
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
firstC = entry.getKey();
break;
}
}
for (int i = 0; i < chs.length; i++) {
if (chs[i] == firstC) {
return i;
}
}
return -1;
}
/**
* 照比方法优化是使用了api快了几毫秒
* @param s
* @return
*/
public static int firstUniqChar1(String s) {
if ("".equals(s)) {
return -1;
}
char[] chs = s.toCharArray();
Map<Character, Integer> map = new LinkedHashMap<Character, Integer>();
for (int i = 0; i < chs.length; i++) {
Character key = chs[i];
if (map.containsKey(key)) {
Integer count = map.get(key);
map.put(key, ++count);
} else {
map.put(key, 1);
}
}
Character firstC = ' ';
for (Map.Entry<Character, Integer> entry : map.entrySet()) {
if (entry.getValue() == 1) {
firstC = entry.getKey();
break;
}
}
return s.indexOf(firstC);
}
public static void main(String[] args) {
String s = "loveleetcode";
System.out.println(firstUniqChar(s));
}
}
Ransom Note
import java.util.HashMap;
import java.util.Map;
/**
* 勒索信
* 匹配ransomNote中的字符是否能在magazine中找到
*
*/
public class Lc383 {
public static boolean canConstruct(String ransomNote, String magazine) {
if (!"".equals(ransomNote) && "".equals(magazine)) {
return false;
}
char[] chs = magazine.toCharArray();
Map<Character, Integer> map = new HashMap<Character, Integer>();
for (char key : chs) {
if (map.containsKey(key)) {
Integer count = map.get(key);
map.put(key, ++count);
} else {
map.put(key, 1);
}
}
char[] chsRansonNote = ransomNote.toCharArray();
for (char c : chsRansonNote) {
int count = 0;
count = map.get(c) != null ? map.get(c) : 0;
count--;
map.put(c, count);
if (count < 0) {
return false;
}
}
return true;
}
public static void main(String[] args) {
String ransomNote = "";
String magazine = "a";
System.out.println(canConstruct(ransomNote, magazine));
}
}
Reverse String
/**
*反转字符串
*
*/
public class Lc344 {
public static void reverseString(char[] s) {
for (int i = 0; i < Math.round(s.length / 2); i++) {
char temp = s[i];
s[i] = s[s.length - 1 - i];
s[s.length - 1 - i] = temp;
}
}
public static void main(String[] args) {
char[] s = { 'h', 'e', 'l', 'l', 'o' };
reverseString(s);
}
}
leetcode-字符串篇的更多相关文章
- c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)
原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬 ...
- LeetCode 字符串专题(一)
目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...
- 【leetcode 字符串处理】Compare Version Numbers
[leetcode 字符串处理]Compare Version Numbers @author:wepon @blog:http://blog.csdn.net/u012162613 1.题目 Com ...
- LeetCode刷题总结-字符串篇
本文梳理对LeetCode上有关字符串习题的知识点,并给出对应的刷题建议.本文建议刷题的总数为32题.具体知识点如下图: 1.回文问题 题号:5. 最长回文子串,难度中等 题号:214. 最短回文串, ...
- Leetcode初级算法(字符串篇)
目录 反转字符串 颠倒整数 字符串中的第一个唯一字符 有效的字母异位词 验证回文字符串 实现strStr() 数数并说 最长公共前缀 字符串转整数(atoi) 反转字符串 和vector同样的进行sw ...
- leetcode 字符串类型题
1,Vaild Palindrome bool isPalindrome(string& s) { transform(s.begin(), s.end(), s.begin(), tolow ...
- leetcode 字符串中的第一个唯一字符
给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "loveleetcod ...
- leetcode 字符串动态规划总结
问题1:leetcode 正则表达式匹配 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配 ...
- golang基础教程——字符串篇
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第6篇文章,这篇主要和大家聊聊golang当中的字符串的使用. 字符串定义 golang当中的字符串本质是只读的字符 ...
- C#之字符串篇
大杂烩 一.类型转换 字符串转整形: int a = int.Parse(""); //不能转换null int b = Convert.ToInt32("&quo ...
随机推荐
- 修改CentOS7网卡名字
需求:CentOS7网卡名字不像之前CentOS6版本的eth0,eth1这样的名字了,而是enoxxx比较长,不太容易记忆,操作也不方便!这时候就需要改网卡名字了. 1 :查看你的CentOS7 ...
- 东拼西凑完成一个“前端框架”(4) - Tabs页
目录 东拼西凑完成一个后台 "前端框架" (1) - 布局 东拼西凑完成一个后台 "前端框架" (2) - 字体图标 东拼西凑完成一个"前端框架&q ...
- super()派生使用中的常见两个错误
""" super()派生可以继承父类的属性 --super()派生继承父类的语法是:super().__init__() --super().__init__()中的_ ...
- 微信小程序 wepy框架 之拦截器intercepter使用
1,在使用wepy框架创建的项目下 找到src/app.wpy 2,在app.wpy constructor方法中添加 super(); this.use('promisify');//启用ES6 p ...
- mySql的case when用法
背景 有点忘了,记录下 写法一 case colume when condition then result when condition then result when condition the ...
- Sunset: Nightfall Vulnhub Walkthrough
靶机链接: https://www.vulnhub.com/entry/sunset-nightfall,355/ 主机扫描: ╰─ nmap -p- -A 10.10.202.162Starting ...
- spring boot 2 + shiro 实现权限管理
Shiro是一个功能强大且易于使用的Java安全框架,主要功能有身份验证.授权.加密和会话管理.看了网上一些文章,下面2篇文章写得不错.Springboot2.0 集成shiro权限管理 Spring ...
- day01-day02 初识java、注释、变量、变量命名、基本数据类型
1. 初识java 1) 什么是java java是一门高级的计算机编程语言 2) JDK的安装 2.1) 下载2.2) 安装2.3) 验证 3) 环境变量的配置 3.1) 打开环境变量3.2) 配置 ...
- ReactNative: 使用对话框组件AlertIOS组件
一.简介 在使用一款App的时候,经常会用到对话框进行信息的友好提示,一般简单要求性不高的时候我们可以使用web提供的alert实现即可.但是,对于需要交互性和美观性的对话框,alert就明显无法满足 ...
- JCC 指令
JCC跳转指令 JCC指条件跳转指令,CC就是指条件码. JCC指令 中文含义 英文原意 检查符号位 典型C应用 JZ/JE 若为0则跳转:若相等则跳转 jump if zero;jump if eq ...