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-字符串篇的更多相关文章

  1. c++ LeetCode (初级字符串篇) 九道算法例题代码详解(二)

    原文作者:aircraft 原文链接:https://www.cnblogs.com/DOMLX/p/11089327.html 已经刷了很多篇leetcode题了,不过最近在找c++的实习工作(大佬 ...

  2. LeetCode 字符串专题(一)

    目录 LeetCode 字符串专题 <c++> \([5]\) Longest Palindromic Substring \([28]\) Implement strStr() [\(4 ...

  3. 【leetcode 字符串处理】Compare Version Numbers

    [leetcode 字符串处理]Compare Version Numbers @author:wepon @blog:http://blog.csdn.net/u012162613 1.题目 Com ...

  4. LeetCode刷题总结-字符串篇

    本文梳理对LeetCode上有关字符串习题的知识点,并给出对应的刷题建议.本文建议刷题的总数为32题.具体知识点如下图: 1.回文问题 题号:5. 最长回文子串,难度中等 题号:214. 最短回文串, ...

  5. Leetcode初级算法(字符串篇)

    目录 反转字符串 颠倒整数 字符串中的第一个唯一字符 有效的字母异位词 验证回文字符串 实现strStr() 数数并说 最长公共前缀 字符串转整数(atoi) 反转字符串 和vector同样的进行sw ...

  6. leetcode 字符串类型题

    1,Vaild Palindrome bool isPalindrome(string& s) { transform(s.begin(), s.end(), s.begin(), tolow ...

  7. leetcode 字符串中的第一个唯一字符

    给定一个字符串,找到它的第一个不重复的字符,并返回它的索引.如果不存在,则返回 -1. 案例: s = "leetcode" 返回 0. s = "loveleetcod ...

  8. leetcode 字符串动态规划总结

    问题1:leetcode 正则表达式匹配 请实现一个函数用来匹配包括'.'和'*'的正则表达式.模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次). 在本题中,匹配 ...

  9. golang基础教程——字符串篇

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是golang专题的第6篇文章,这篇主要和大家聊聊golang当中的字符串的使用. 字符串定义 golang当中的字符串本质是只读的字符 ...

  10. C#之字符串篇

    大杂烩 一.类型转换    字符串转整形: int a = int.Parse(""); //不能转换null int b = Convert.ToInt32("&quo ...

随机推荐

  1. 【Feign】自定义配置

    [Feign]自定义配置 转载: 自定义配置,如果在同一个工程,注意配置不要和@SpringBootApplication或@ComponentSacan放在用一个包下,就是不要被扫描上 packag ...

  2. 你不知道的JavaScript(中)读书笔记(一)

    第一章 1.内置类型 JavaScript有七种内置类型[除了对象以外,其他统称为“基本类型”]: 空值(null) 未定义(undefined) 布尔值(boolean) 数字(number) 字符 ...

  3. PHP中抽象类和接口的区别

    抽象类 抽象类无法被实例化,它的作用是为所有继承自它的类定义(或部分实现)接口. 使用 abstract 关键字定义抽象类. 可以像在普通类中那样在抽象类中创建方法和属性,在大多数情况下,一个抽象类至 ...

  4. UWP 打开系统设置面板

    由于UWP各种权限管理的比较严格,所以在执行某一个特殊的操作之前,最好先申请一下相应的权限,以便告知用户你使用了这个权限,而且可以有效的避免App崩溃. 比如你想让用户手动打开麦克风权限,那么可以执行 ...

  5. CAD绘图效率低?教你4个CAD绘图技巧,绘图效率提升十倍

    CAD绘图一直是一个谜一样的存在,说它简单吧,很多人都无法完全精通,说它难吧,很多人也都自学成才了. 如何学好CAD绘图是个难题,但是老话说的好,只要思想不滑坡,办法总比困难多,掌握以下这些CAD绘图 ...

  6. Ngnix:最通俗解读,Nginx是什么

    Nginx 同 Apache 一样都是一种 Web 服务器.基于 REST 架构风格,以统一资源描述符(Uniform Resources Identifier)URI 或者统一资源定位符(Unifo ...

  7. maven的下载、安装及配置

    一.下载maven 1. maven的下载路径 (1)Apache官网:https://maven.apache.org (2)https://pan.baidu.com/s/1Yvv44ICGSxG ...

  8. day05生成随机数、do-while循环、for循环、循环流控(break和continue)、循环嵌套

    复习 1.多重if 一个条件触发的情况在3种或以上时 if(<条件1>){ //条件1为真时运行 }else if(<条件2>){ //条件1为假,条件2为真时运行 }else ...

  9. 2019年腾讯PHP程序员面试题目分享

    有需要学习交流的友人请加入交流群的咱们一起,有问题一起交流,一起进步!前提是你是学技术的.感谢阅读! 点此加入该群​jq.qq.com 1. php 的垃圾回收机制 PHP 可以自动进行内存管理,清除 ...

  10. 前端小白webpack学习(四)

    .less文件与.scss文件使用与.css文件相仿 less-loader使用需要借助less插件,终端输入npm i less less-loader -D安装; sass-loader使用需要借 ...