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 ...
随机推荐
- 【Feign】自定义配置
[Feign]自定义配置 转载: 自定义配置,如果在同一个工程,注意配置不要和@SpringBootApplication或@ComponentSacan放在用一个包下,就是不要被扫描上 packag ...
- 你不知道的JavaScript(中)读书笔记(一)
第一章 1.内置类型 JavaScript有七种内置类型[除了对象以外,其他统称为“基本类型”]: 空值(null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符 ...
- PHP中抽象类和接口的区别
抽象类 抽象类无法被实例化,它的作用是为所有继承自它的类定义(或部分实现)接口. 使用 abstract 关键字定义抽象类. 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下,一个抽象类至 ...
- UWP 打开系统设置面板
由于UWP各种权限管理的比较严格,所以在执行某一个特殊的操作之前,最好先申请一下相应的权限,以便告知用户你使用了这个权限,而且可以有效的避免App崩溃. 比如你想让用户手动打开麦克风权限,那么可以执行 ...
- CAD绘图效率低?教你4个CAD绘图技巧,绘图效率提升十倍
CAD绘图一直是一个谜一样的存在,说它简单吧,很多人都无法完全精通,说它难吧,很多人也都自学成才了. 如何学好CAD绘图是个难题,但是老话说的好,只要思想不滑坡,办法总比困难多,掌握以下这些CAD绘图 ...
- Ngnix:最通俗解读,Nginx是什么
Nginx 同 Apache 一样都是一种 Web 服务器.基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Unifo ...
- maven的下载、安装及配置
一.下载maven 1. maven的下载路径 (1)Apache官网:https://maven.apache.org (2)https://pan.baidu.com/s/1Yvv44ICGSxG ...
- day05生成随机数、do-while循环、for循环、循环流控(break和continue)、循环嵌套
复习 1.多重if 一个条件触发的情况在3种或以上时 if(<条件1>){ //条件1为真时运行 }else if(<条件2>){ //条件1为假,条件2为真时运行 }else ...
- 2019年腾讯PHP程序员面试题目分享
有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...
- 前端小白webpack学习(四)
.less文件与.scss文件使用与.css文件相仿 less-loader使用需要借助less插件,终端输入npm i less less-loader -D安装; sass-loader使用需要借 ...