#14 Longest Common Prefix

Write a function to find the longest common prefix string amongst an array of strings.

这个题求多个字符串的公共前缀,除了要考虑串空外,假设存在公共前缀,那么必然也是第一个串的前缀。

所以能够以第一个串为基准,比較其它串的前缀是否与第一个串同样。

char* longestCommonPrefix(char** strs, int strsSize) {
char *s0,*si;
int index;//指示比較位置
if (strsSize <= 0 || strs == NULL) return strs;
if (strsSize == 1) return strs[0];
s0 = strs[0];//以第一个字符串为基准
for (int i = 1; i < strsSize; ++i)
{
si = strs[i];
index = 0;//每一个字符串从0位置開始比較
while (true)
{
if (s0[index] != si[index] || s0[index] == NULL || si[index] == NULL)
{
s0[index] = '\0';//对于不相等的位置,必然不是公共前缀
break;
}
index++;
}
}
return strs[0];
}

#19 Remove Nth Node From End of List

Given a linked list, remove the nth node from the end of list and return its head.

For example,

   Given linked list: 1->2->3->4->5, and n = 2.

   After removing the second node from the end, the linked list becomes 1->2->3->5.

Note:

Given n will always be valid.

Try to do this in one pass.

//0ms
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
int len=0,j=0;
struct ListNode *p,*q;
p = head;//指向第一个元素 没有头结点
//求链表长度
while(p!=NULL)
{
p = p->next;
len++;
}
//边界条件
if(len-n<0)
return NULL;
if(len==1 &&n==1)
return NULL;
p = head;//指向第一个元素
q=p;
//删除的元素是第一个位置,不存在q全部先讨论
if(n==len)
{
p =head->next;
return p;
}
//一般条件---待删除元素位于第len-n+1个位置,倒数第n个位置
for(j=1;j<=len-n;j++)
{
q = p;//q指向待删除元素前一个元素第len-n个元素
p = p->next;//p指向待删除元素---第len-n+1个元素
}
q->next = p->next;
return head;
}

在leetcode discuss里面又看到第二种写法,一次遍历得到待删除节点位置

struct ListNode* removeNthFromEnd(struct ListNode* head, int n)
{
struct ListNode* front = head;
struct ListNode* behind = head;
//front后移len长度,behind后移len-n长度。behind->next即为待删除节点
while (front != NULL)
{
front = front->next;
if (n-- < 0)
behind = behind->next;
}
if (n == 0)//len==n
head = head->next;
else
behind->next = behind->next->next;
return head;
}

#20 Valid Parentheses

Given a string containing just the characters '('')''{''}''[' and ']',
determine if the input string is valid.

The brackets must close in the correct order, "()" and "()[]{}" are
all valid but "(]" and "([)]" are
not.

括号匹配,首先想到栈。

bool isValid(char* s) {
int i,top,len;
char *a;
char ch;
len = strlen(s);
a = (char *)malloc(sizeof(char)*len);
top =-1;
for(i=0;i<len;i++)
{
ch = s[i];
if(ch=='{'||ch=='('||ch=='[')
a[++top] = ch;
if(ch==']'||ch==')'||ch=='}')
{
if(top==-1)
return false;
else if(ch==']'&& a[top]=='[')
top--;
else if(ch=='}'&& a[top]=='{')
top--;
else if(ch==')'&& a[top]=='(')
top--;
else
return false;
}
}
if(top==-1)
return true;
else
return false;
}

#21 Merge Two Sorted Lists

Merge
two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

合并两个有序链表---首先想到了归并排序最后的合并两个有序数组,写法全然类似。查了下面discuss 发现一种递归的写法。

/**4ms
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2) {
struct ListNode *p,*head;
head = p;
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
while(l1&&l2)
{
if(l1->val <= l2->val)
{
p->next = l1;
l1 = l1->next;
}
else
{
p->next = l2;
l2 = l2->next;
}
p = p->next;
}
if(l1)
p->next = l1;
if(l2)
p->next = l2;
return head->next;
}
/**4ms
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* mergeTwoLists(struct ListNode* l1, struct ListNode* l2)
{
struct ListNode* l3;
if(l1==NULL)
return l2;
if(l2==NULL)
return l1;
if(l1->val < l2->val)
{
l3 = l1;
l3->next = mergeTwoLists(l1->next,l2);
}
else
{
l3 = l2;
l3->next = mergeTwoLists(l1,l2->next);
}
return l3;
}

Leetcode--easy系列2的更多相关文章

  1. hdu 2049 不easy系列之(4)——考新郎

    不easy系列之(4)--考新郎 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

  2. LeetCode——single-number系列

    LeetCode--single-number系列 Question 1 Given an array of integers, every element appears twice except ...

  3. HDU 2045不easy系列之三LELE的RPG难题(趋向于DP的递推)

    不easy系列之(3)-- LELE的RPG难题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Ot ...

  4. hdu1465不easy系列之中的一个(错排)

    版权声明:本文为博主原创文章,未经博主同意不得转载. vasttian https://blog.csdn.net/u012860063/article/details/37512659 转载请注明出 ...

  5. Leetcode算法系列(链表)之删除链表倒数第N个节点

    Leetcode算法系列(链表)之删除链表倒数第N个节点 难度:中等给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点.示例:给定一个链表: 1->2->3->4-&g ...

  6. Leetcode算法系列(链表)之两数相加

    Leetcode算法系列(链表)之两数相加 难度:中等给出两个 非空 的链表用来表示两个非负的整数.其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字.如果,我们将 ...

  7. leetcode easy problem set

     *勿以浮沙筑高台* 持续更新........     题目网址:https://leetcode.com/problemset/all/?difficulty=Easy 1. Two Sum [4m ...

  8. [Leetcode] Sum 系列

    Sum 系列题解 Two Sum题解 题目来源:https://leetcode.com/problems/two-sum/description/ Description Given an arra ...

  9. LeetCode 笔记系列16.3 Minimum Window Substring [从O(N*M), O(NlogM)到O(N),人生就是一场不停的战斗]

    题目:Given a string S and a string T, find the minimum window in S which will contain all the characte ...

  10. 决战Leetcode: easy part(51-96)

    本博客是个人原创的针对leetcode上的problem的解法,所有solution都基本通过了leetcode的官方Judging,个别未通过的例外情况会在相应部分作特别说明. 欢迎互相交流! em ...

随机推荐

  1. mysql 登录与权限

    一.mysql 登录方式 1.1 格式:mysql -u用户名 -p密码 -h ip -P 端口 -S 套接字 mysql -uvagrant -pvagrant -h 127.0.0.1 -P 33 ...

  2. Springboot使用AOP实现统一处理Web请求日志

    1.要使我们自定义的记录日志能够打印出来,我们需要先排除springboot默认的记录日志,添加如下的设置 2.新建 resources/log4j.properties 我的设置为: # LOG4J ...

  3. 学习环境搭建1——安装python

    操作系统:windows7 64bit 下载地址python :https://www.python.org/      下载Windows x86-64 executable installer 安 ...

  4. javascript中标准事件流addEventListener介绍

    addEventListener-开始 前面零散地写了些关于 addEventListener 的内容,觉得比较散,有些地方可能也说得不够清楚明白,所以决定以连载的形式从头到尾再写一篇. addEve ...

  5. PowerDesigner 逆向工程 Could not Initialize JavaVM!

    原项目的大量的表,使用PowerDesigner 进行逆向工程.提示Could not Initialize JavaVM! 网上找到原因,PowerDesigner 不可以使用64位JDK环境! 有 ...

  6. Boost1.67编译+CMake Generate时遇到的一个错误

    下载的一个库编译时依赖boost,记录一下boost的编译: 下载源码 vs命令行里cd到根目录,运行bootstrap.bat,发现多了几个文件{b2.exe.bjam.exe.project-co ...

  7. Approximate Nearest Neighbors.接近最近邻搜索

    (一):次优最近邻:http://en.wikipedia.org/wiki/Nearest_neighbor_search 有少量修改:如有疑问,请看链接原文.....1.Survey:Neares ...

  8. RabbitMQ学习之spring配置文件rabbit标签的使用

    下面我们通过一个实例看一下rabbit的使用. 1.实现一个消息监听器ReceiveMessageListener.Java package org.springframework.amqp.core ...

  9. 图片放大不失真软件PhotoZoom如何使用?

    PhotoZoom可以将我们一些过于像素低的照片可以无失真放大,那么PhotoZoom是如何实现无失真照片放大的呢? 以上图像中的编号表示每个步骤应操作的位置. 单击“打开”,并选择您想调整大小的图像 ...

  10. httpclient模拟浏览器

    package com.java.httpclient; import java.io.IOException; import org.apache.http.HttpEntity; import o ...